)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"9dcfbc7404f217593ab66baa21bdea4e9d7cfb74","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Intorduces Monasca datasource enabling Monasca alerts and clusters in"},{"line_number":10,"context_line":"Vitrage Entity Graph."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ib3549c404c84e549f66e6057368c3f227bfe806a"},{"line_number":13,"context_line":"Signed-off-by: Bartosz Zurkowski \u003cb.zurkowski@samsung.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3f79a3b5_074e8890","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":0},"updated":"2018-12-05 11:11:50.000000000","message":"There already is a user story for it:\nStory: 2004064\nTask: 27072\n\n(I think we should split the user story to two, because the other two tasks can be implemented at a later stage).","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"2495794b4a833a4d424da7260e61a6f57fa713d9","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Intorduces Monasca datasource enabling Monasca alerts and clusters in"},{"line_number":10,"context_line":"Vitrage Entity Graph."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ib3549c404c84e549f66e6057368c3f227bfe806a"},{"line_number":13,"context_line":"Signed-off-by: Bartosz Zurkowski \u003cb.zurkowski@samsung.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3f79a3b5_ed600d0f","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":0},"in_reply_to":"3f79a3b5_074e8890","updated":"2018-12-05 12:10:15.000000000","message":"Yes, the story should be splitted. Should I assign myself to some task?\n\nAs far as I know, currently we can only provide PULL-based Monasca datasource. I could not find any mention about Monasca emitting alarm notifications via the message broker. There is also no AMQP plugin in Monasca Notification repository [1]. The only method I found was to fetch alarms by hitting Monasca Alarms API endpoint [2].\n\n[1] https://github.com/openstack/monasca-notification/tree/master/monasca_notification/plugins\n[2] https://github.com/openstack/monasca-api/blob/master/docs/monasca-api-spec.md#alarms","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":16222,"name":"witek","email":"witold.bedyk@suse.com","username":"witek"},"change_message_id":"689f46936dedfdf30b7f64391e30c84630d84efc","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Intorduces Monasca datasource enabling Monasca alerts and clusters in"},{"line_number":10,"context_line":"Vitrage Entity Graph."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ib3549c404c84e549f66e6057368c3f227bfe806a"},{"line_number":13,"context_line":"Signed-off-by: Bartosz Zurkowski \u003cb.zurkowski@samsung.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3f79a3b5_ce4acb7a","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":0},"in_reply_to":"3f79a3b5_1816e5a3","updated":"2018-12-06 17:00:33.000000000","message":"Yes, we support webhook notifications. We could add AMQP notification plugin if that makes more sense.","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"8979a59bd0ce2d57f7069bca4f44b06559d0b0c8","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Intorduces Monasca datasource enabling Monasca alerts and clusters in"},{"line_number":10,"context_line":"Vitrage Entity Graph."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ib3549c404c84e549f66e6057368c3f227bfe806a"},{"line_number":13,"context_line":"Signed-off-by: Bartosz Zurkowski \u003cb.zurkowski@samsung.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3f79a3b5_1816e5a3","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":0},"in_reply_to":"3f79a3b5_ed600d0f","updated":"2018-12-05 12:57:05.000000000","message":"I split the story. The original story (2004064) is for the notifications and the new one (2004550) is for the current implementation.\n\nRegarding the notification, I understood that Monasca can send webhook notifications. Vitrage can almost consume those, it requires a minimal refactoring in \u0027vitrage event post\u0027 implementation. We have a story for that as well: 2004058\n\nYou are welcome to assign yourself to any task you want :-)","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":10311,"name":"Joseph Davis","email":"joseph.davis@suse.com","username":"joadavis"},"change_message_id":"4baa3d1b2126358049bc8339ce458d95a26c8e61","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add Monasca datasource"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Intorduces Monasca datasource enabling Monasca alerts and clusters in"},{"line_number":10,"context_line":"Vitrage Entity Graph."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ib3549c404c84e549f66e6057368c3f227bfe806a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3f79a3b5_049b30c7","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":10},"updated":"2018-12-13 19:18:59.000000000","message":"small typo","commit_id":"8f3e5002d8b305fd27b766c5b42143708890b7d7"}],"releasenotes/notes/monasca-datasource-9ca61922ef14c2a8.yaml":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"0e52b887192a9711fac1b5fed596cedfa762d69c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"  In the future, PUSH approach based on Monasca notifications will be"},{"line_number":13,"context_line":"  implemented."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"  Current implementation requires that the metrics associated with the given"},{"line_number":16,"context_line":"  alarm contain information about resource type and ID - required for"},{"line_number":17,"context_line":"  associating alarms with entities in Vitrage Entity Graph. This additional"},{"line_number":18,"context_line":"  information should be included in the form of metric dimensions, precisely"},{"line_number":19,"context_line":"  ``resource_type`` and ``resource_id``. Dimensions can be defined in Monasca"},{"line_number":20,"context_line":"  agent configuration."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"1f769fc5_0d0aa525","line":20,"range":{"start_line":15,"start_character":0,"end_line":20,"end_character":22},"updated":"2018-12-23 15:53:42.000000000","message":"I\u0027m not sure if this should be part of the release notes. We should have a more general solution for Stein. However, we plan to make a release next week (towards milestone 2) which will not include the full solution yet.","commit_id":"b807ba82f6bd0ae78f5fe26b2f9eafe7aa59d2c9"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"5ea1aa28074e336e0d86f7e2cead989ed0ccb43c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - A new ``Monasca Datasource`` has been introduced to include Monasca alarms"},{"line_number":4,"context_line":"    in Vitrage Entity Graph. Monasca is Monitoring as a Service solution"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"9fdfeff1_4471cba7","line":1,"updated":"2019-02-13 14:45:19.000000000","message":"I think it is very detailed release note.\nRelease note is meant to specify what new/changed in the version.\nDetailing the implementation should be in the documentation.","commit_id":"8580b0e25da1058b56d2b62db4d083e6eaa08d91"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"754781f65ac9ea2faa2b62b31c14df80ec56d927","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - A new ``Monasca Datasource`` has been introduced to include Monasca alarms"},{"line_number":4,"context_line":"    in Vitrage Entity Graph. Monasca is Monitoring as a Service solution"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"9fdfeff1_c066eced","line":1,"in_reply_to":"9fdfeff1_4471cba7","updated":"2019-02-14 13:05:38.000000000","message":"It is partially related to the general state of this change. It seems to be on hold because of the WIP spec. Maybe we should consider merging it with a limitation of specific Monasca dimensions (resource type and resource id), and then finish the spec and improve the implementation. \n\nThe last paragraph of the release notes is related only to this issue, and can be removed once we have a complete implementation.","commit_id":"8580b0e25da1058b56d2b62db4d083e6eaa08d91"},{"author":{"_account_id":16222,"name":"witek","email":"witold.bedyk@suse.com","username":"witek"},"change_message_id":"1c3f7058cf9c1426f9e5c0a4062b1bc6b671a836","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - A new ``Monasca Datasource`` has been introduced to include Monasca alarms"},{"line_number":4,"context_line":"    in Vitrage Entity Graph. Monasca is Monitoring as a Service solution"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"9fdfeff1_633ce592","line":1,"in_reply_to":"9fdfeff1_c066eced","updated":"2019-02-14 17:13:35.000000000","message":"+1","commit_id":"8580b0e25da1058b56d2b62db4d083e6eaa08d91"}],"requirements.txt":[{"author":{"_account_id":16222,"name":"witek","email":"witold.bedyk@suse.com","username":"witek"},"change_message_id":"689f46936dedfdf30b7f64391e30c84630d84efc","unresolved":false,"context_lines":[{"line_number":15,"context_line":"python-heatclient\u003e\u003d1.14.0 # Apache-2.0"},{"line_number":16,"context_line":"python-mistralclient\u003e\u003d3.3.0 # Apache-2.0"},{"line_number":17,"context_line":"python-openstackclient\u003e\u003d3.12.0 # Apache-2.0"},{"line_number":18,"context_line":"python-monascaclient\u003e\u003d1.7.0 # Apache-2.0"},{"line_number":19,"context_line":"gnocchiclient\u003e\u003d3.3.1 # Apache-2.0"},{"line_number":20,"context_line":"pyzabbix\u003e\u003d0.7.4 # LGPL"},{"line_number":21,"context_line":"networkx\u003e\u003d1.11 # BSD"}],"source_content_type":"text/plain","patch_set":1,"id":"3f79a3b5_0e1a037f","line":18,"range":{"start_line":18,"start_character":22,"end_line":18,"end_character":27},"updated":"2018-12-06 17:00:33.000000000","message":"I would bump it to 1.7.1","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"e4044e3042b778b25e0b6c3a20d9735935b93554","unresolved":false,"context_lines":[{"line_number":15,"context_line":"python-heatclient\u003e\u003d1.14.0 # Apache-2.0"},{"line_number":16,"context_line":"python-mistralclient\u003e\u003d3.3.0 # Apache-2.0"},{"line_number":17,"context_line":"python-openstackclient\u003e\u003d3.12.0 # Apache-2.0"},{"line_number":18,"context_line":"python-monascaclient\u003e\u003d1.7.0 # Apache-2.0"},{"line_number":19,"context_line":"gnocchiclient\u003e\u003d3.3.1 # Apache-2.0"},{"line_number":20,"context_line":"pyzabbix\u003e\u003d0.7.4 # LGPL"},{"line_number":21,"context_line":"networkx\u003e\u003d1.11 # BSD"}],"source_content_type":"text/plain","patch_set":1,"id":"1f769fc5_ed02c93e","line":18,"range":{"start_line":18,"start_character":22,"end_line":18,"end_character":27},"in_reply_to":"3f79a3b5_0e1a037f","updated":"2018-12-23 14:52:44.000000000","message":"Done","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":10311,"name":"Joseph Davis","email":"joseph.davis@suse.com","username":"joadavis"},"change_message_id":"4baa3d1b2126358049bc8339ce458d95a26c8e61","unresolved":false,"context_lines":[{"line_number":15,"context_line":"python-heatclient\u003e\u003d1.14.0 # Apache-2.0"},{"line_number":16,"context_line":"python-mistralclient\u003e\u003d3.3.0 # Apache-2.0"},{"line_number":17,"context_line":"python-openstackclient\u003e\u003d3.12.0 # Apache-2.0"},{"line_number":18,"context_line":"python-monascaclient\u003e\u003d1.7.0 # Apache-2.0"},{"line_number":19,"context_line":"gnocchiclient\u003e\u003d3.3.1 # Apache-2.0"},{"line_number":20,"context_line":"pyzabbix\u003e\u003d0.7.4 # LGPL"},{"line_number":21,"context_line":"networkx\u003e\u003d1.11 # BSD"}],"source_content_type":"text/plain","patch_set":4,"id":"3f79a3b5_44dfe86c","line":18,"range":{"start_line":18,"start_character":22,"end_line":18,"end_character":27},"updated":"2018-12-13 19:18:59.000000000","message":"As witek commented, you can bump this to 1.7.1","commit_id":"8f3e5002d8b305fd27b766c5b42143708890b7d7"}],"vitrage/datasources/monasca/__init__.py":[{"author":{"_account_id":10311,"name":"Joseph Davis","email":"joseph.davis@suse.com","username":"joadavis"},"change_message_id":"28f81a1cdfad57523b6c1bd7e6811f89cf6396bc","unresolved":false,"context_lines":[{"line_number":22,"context_line":"OPTS \u003d ["},{"line_number":23,"context_line":"    cfg.StrOpt(DSOpts.TRANSFORMER,"},{"line_number":24,"context_line":"               default\u003d\u0027vitrage.datasources.monasca.transformer.\u0027"},{"line_number":25,"context_line":"                       \u0027MonascaTransformer\u0027,"},{"line_number":26,"context_line":"               help\u003d\u0027Monasca transformer class path.\u0027,"},{"line_number":27,"context_line":"               required\u003dTrue),"},{"line_number":28,"context_line":"    cfg.StrOpt(DSOpts.DRIVER,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_d33fcd22","line":25,"range":{"start_line":25,"start_character":23,"end_line":25,"end_character":44},"updated":"2019-02-12 23:28:21.000000000","message":"Just a side note - there is a \"Monasca Transform\" that runs as part of the Monasca stack to aggregate metrics.  Shouldn\u0027t be a problem, but similar naming could cause some confusion if we don\u0027t document it clearly.","commit_id":"8580b0e25da1058b56d2b62db4d083e6eaa08d91"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"a552a2e8c54bbd63fa8bcbde7cec6d84bd8649f1","unresolved":false,"context_lines":[{"line_number":22,"context_line":"OPTS \u003d ["},{"line_number":23,"context_line":"    cfg.StrOpt(DSOpts.TRANSFORMER,"},{"line_number":24,"context_line":"               default\u003d\u0027vitrage.datasources.monasca.transformer.\u0027"},{"line_number":25,"context_line":"                       \u0027MonascaTransformer\u0027,"},{"line_number":26,"context_line":"               help\u003d\u0027Monasca transformer class path.\u0027,"},{"line_number":27,"context_line":"               required\u003dTrue),"},{"line_number":28,"context_line":"    cfg.StrOpt(DSOpts.DRIVER,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_dea4ad4d","line":25,"range":{"start_line":25,"start_character":23,"end_line":25,"end_character":44},"in_reply_to":"9fdfeff1_d33fcd22","updated":"2019-02-13 07:50:20.000000000","message":"This option is defined in the same way for every transformer in Vitrage. Theoretically it is configurable, but practically it doesn\u0027t make sense to overwrite the default and I have never seen it used in vitrage.conf. \n\nI think there will not be a confusion, because the \"MonascaTransformer\" in Vitrage will be visible only to Vitrage and Monasca developers, that can understand the difference. End users will not be aware of its existence.","commit_id":"8580b0e25da1058b56d2b62db4d083e6eaa08d91"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"5ea1aa28074e336e0d86f7e2cead989ed0ccb43c","unresolved":false,"context_lines":[{"line_number":22,"context_line":"OPTS \u003d ["},{"line_number":23,"context_line":"    cfg.StrOpt(DSOpts.TRANSFORMER,"},{"line_number":24,"context_line":"               default\u003d\u0027vitrage.datasources.monasca.transformer.\u0027"},{"line_number":25,"context_line":"                       \u0027MonascaTransformer\u0027,"},{"line_number":26,"context_line":"               help\u003d\u0027Monasca transformer class path.\u0027,"},{"line_number":27,"context_line":"               required\u003dTrue),"},{"line_number":28,"context_line":"    cfg.StrOpt(DSOpts.DRIVER,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_64840f5f","line":25,"range":{"start_line":25,"start_character":23,"end_line":25,"end_character":44},"in_reply_to":"9fdfeff1_dea4ad4d","updated":"2019-02-13 14:45:19.000000000","message":"+1","commit_id":"8580b0e25da1058b56d2b62db4d083e6eaa08d91"}],"vitrage/datasources/monasca/driver.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"9dcfbc7404f217593ab66baa21bdea4e9d7cfb74","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        return MONASCA_DATASOURCE"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def _alarm_key(self, alarm):"},{"line_number":49,"context_line":"        return alarm[MProps.ID]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def _get_alarms(self):"},{"line_number":52,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_a70d5440","line":49,"range":{"start_line":49,"start_character":21,"end_line":49,"end_character":30},"updated":"2018-12-05 11:11:50.000000000","message":"Is it a unique ID of the alarm?","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"8979a59bd0ce2d57f7069bca4f44b06559d0b0c8","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        return MONASCA_DATASOURCE"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def _alarm_key(self, alarm):"},{"line_number":49,"context_line":"        return alarm[MProps.ID]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def _get_alarms(self):"},{"line_number":52,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_3813a1b3","line":49,"range":{"start_line":49,"start_character":21,"end_line":49,"end_character":30},"in_reply_to":"3f79a3b5_6dbb9d0f","updated":"2018-12-05 12:57:05.000000000","message":"Good, thanks","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"2495794b4a833a4d424da7260e61a6f57fa713d9","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        return MONASCA_DATASOURCE"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def _alarm_key(self, alarm):"},{"line_number":49,"context_line":"        return alarm[MProps.ID]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def _get_alarms(self):"},{"line_number":52,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_6dbb9d0f","line":49,"range":{"start_line":49,"start_character":21,"end_line":49,"end_character":30},"in_reply_to":"3f79a3b5_a70d5440","updated":"2018-12-05 12:10:15.000000000","message":"Correct. Please, examine API spec [1] for more details.\n\n[1] https://github.com/openstack/monasca-api/blob/master/docs/monasca-api-spec.md#response-examples-19","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"9dcfbc7404f217593ab66baa21bdea4e9d7cfb74","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    def _get_alarms(self):"},{"line_number":52,"context_line":"        try:"},{"line_number":53,"context_line":"            alarms \u003d self.client.alarms.list()"},{"line_number":54,"context_line":"            LOG.info(\u0027Fetched Monasca alarms: %s\u0027 % alarms)"},{"line_number":55,"context_line":"            converted_alarms \u003d [self._convert_alarm(alarm) for alarm in"},{"line_number":56,"context_line":"                                alarms if alarm is not None]"},{"line_number":57,"context_line":"            LOG.info(\u0027Converted alarms: %s\u0027 % converted_alarms)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_27f9441c","line":54,"range":{"start_line":54,"start_character":16,"end_line":54,"end_character":20},"updated":"2018-12-05 11:11:50.000000000","message":"This should be debug level","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"2495794b4a833a4d424da7260e61a6f57fa713d9","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    def _get_alarms(self):"},{"line_number":52,"context_line":"        try:"},{"line_number":53,"context_line":"            alarms \u003d self.client.alarms.list()"},{"line_number":54,"context_line":"            LOG.info(\u0027Fetched Monasca alarms: %s\u0027 % alarms)"},{"line_number":55,"context_line":"            converted_alarms \u003d [self._convert_alarm(alarm) for alarm in"},{"line_number":56,"context_line":"                                alarms if alarm is not None]"},{"line_number":57,"context_line":"            LOG.info(\u0027Converted alarms: %s\u0027 % converted_alarms)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_cdfd11b9","line":54,"range":{"start_line":54,"start_character":16,"end_line":54,"end_character":20},"in_reply_to":"3f79a3b5_27f9441c","updated":"2018-12-05 12:10:15.000000000","message":"Done","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"9dcfbc7404f217593ab66baa21bdea4e9d7cfb74","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            LOG.info(\u0027Fetched Monasca alarms: %s\u0027 % alarms)"},{"line_number":55,"context_line":"            converted_alarms \u003d [self._convert_alarm(alarm) for alarm in"},{"line_number":56,"context_line":"                                alarms if alarm is not None]"},{"line_number":57,"context_line":"            LOG.info(\u0027Converted alarms: %s\u0027 % converted_alarms)"},{"line_number":58,"context_line":"            return converted_alarms"},{"line_number":59,"context_line":"        except Exception:"},{"line_number":60,"context_line":"            LOG.exception(\"Failed to fetch Monasca alarms.\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_8afdbf07","line":57,"range":{"start_line":57,"start_character":16,"end_line":57,"end_character":20},"updated":"2018-12-05 11:11:50.000000000","message":"Same here","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"2495794b4a833a4d424da7260e61a6f57fa713d9","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            LOG.info(\u0027Fetched Monasca alarms: %s\u0027 % alarms)"},{"line_number":55,"context_line":"            converted_alarms \u003d [self._convert_alarm(alarm) for alarm in"},{"line_number":56,"context_line":"                                alarms if alarm is not None]"},{"line_number":57,"context_line":"            LOG.info(\u0027Converted alarms: %s\u0027 % converted_alarms)"},{"line_number":58,"context_line":"            return converted_alarms"},{"line_number":59,"context_line":"        except Exception:"},{"line_number":60,"context_line":"            LOG.exception(\"Failed to fetch Monasca alarms.\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_ed024db9","line":57,"range":{"start_line":57,"start_character":16,"end_line":57,"end_character":20},"in_reply_to":"3f79a3b5_8afdbf07","updated":"2018-12-05 12:10:15.000000000","message":"Done","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"9dcfbc7404f217593ab66baa21bdea4e9d7cfb74","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        except Exception:"},{"line_number":60,"context_line":"            LOG.exception(\"Failed to fetch Monasca alarms.\")"},{"line_number":61,"context_line":"        return []"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def _convert_alarm(self, alarm):"},{"line_number":64,"context_line":"        resource_type, resource_id \u003d self._extract_resource_id(alarm)"},{"line_number":65,"context_line":"        return {"},{"line_number":66,"context_line":"            MProps.ID: alarm[MProps.ID],"},{"line_number":67,"context_line":"            MProps.NAME: extract_field_value(alarm, \u0027alarm_definition\u0027, \u0027name\u0027),"},{"line_number":68,"context_line":"            MProps.RESOURCE_TYPE: resource_type,"},{"line_number":69,"context_line":"            MProps.RESOURCE_ID: resource_id,"},{"line_number":70,"context_line":"            MProps.STATUS: alarm[MProps.STATUS],"},{"line_number":71,"context_line":"            MProps.UPDATE_TIMESTAMP: alarm[MProps.UPDATE_TIMESTAMP]"},{"line_number":72,"context_line":"        }"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def _enrich_alarms(self, alarms):"},{"line_number":75,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_0a3f6fb3","line":72,"range":{"start_line":62,"start_character":0,"end_line":72,"end_character":9},"updated":"2018-12-05 11:11:50.000000000","message":"I\u0027m not sure that the conversions are needed here, maybe they can be moved to the transformer. i.e. the original alarm can be passed to the transformer and then you can extract the relevant fields and create the vertex.","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"2495794b4a833a4d424da7260e61a6f57fa713d9","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        except Exception:"},{"line_number":60,"context_line":"            LOG.exception(\"Failed to fetch Monasca alarms.\")"},{"line_number":61,"context_line":"        return []"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def _convert_alarm(self, alarm):"},{"line_number":64,"context_line":"        resource_type, resource_id \u003d self._extract_resource_id(alarm)"},{"line_number":65,"context_line":"        return {"},{"line_number":66,"context_line":"            MProps.ID: alarm[MProps.ID],"},{"line_number":67,"context_line":"            MProps.NAME: extract_field_value(alarm, \u0027alarm_definition\u0027, \u0027name\u0027),"},{"line_number":68,"context_line":"            MProps.RESOURCE_TYPE: resource_type,"},{"line_number":69,"context_line":"            MProps.RESOURCE_ID: resource_id,"},{"line_number":70,"context_line":"            MProps.STATUS: alarm[MProps.STATUS],"},{"line_number":71,"context_line":"            MProps.UPDATE_TIMESTAMP: alarm[MProps.UPDATE_TIMESTAMP]"},{"line_number":72,"context_line":"        }"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def _enrich_alarms(self, alarms):"},{"line_number":75,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_add69524","line":72,"range":{"start_line":62,"start_character":0,"end_line":72,"end_character":9},"in_reply_to":"3f79a3b5_0a3f6fb3","updated":"2018-12-05 12:10:15.000000000","message":"Yeah, I was meandering around with it for a while because I could find a distinct separation of concerns between driver and transformer, both in the documentation and in the implementation of other datasources.\n\nMaybe you are right. It seems that driver should be responsible only for fetching entities/events, whereas transformer should process fetched data and translate it into graph primitives.\n\nWill fix.","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"e4044e3042b778b25e0b6c3a20d9735935b93554","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        except Exception:"},{"line_number":60,"context_line":"            LOG.exception(\"Failed to fetch Monasca alarms.\")"},{"line_number":61,"context_line":"        return []"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def _convert_alarm(self, alarm):"},{"line_number":64,"context_line":"        resource_type, resource_id \u003d self._extract_resource_id(alarm)"},{"line_number":65,"context_line":"        return {"},{"line_number":66,"context_line":"            MProps.ID: alarm[MProps.ID],"},{"line_number":67,"context_line":"            MProps.NAME: extract_field_value(alarm, \u0027alarm_definition\u0027, \u0027name\u0027),"},{"line_number":68,"context_line":"            MProps.RESOURCE_TYPE: resource_type,"},{"line_number":69,"context_line":"            MProps.RESOURCE_ID: resource_id,"},{"line_number":70,"context_line":"            MProps.STATUS: alarm[MProps.STATUS],"},{"line_number":71,"context_line":"            MProps.UPDATE_TIMESTAMP: alarm[MProps.UPDATE_TIMESTAMP]"},{"line_number":72,"context_line":"        }"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def _enrich_alarms(self, alarms):"},{"line_number":75,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f769fc5_4dee5d89","line":72,"range":{"start_line":62,"start_character":0,"end_line":72,"end_character":9},"in_reply_to":"3f79a3b5_186b451d","updated":"2018-12-23 14:52:44.000000000","message":"Done","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"8979a59bd0ce2d57f7069bca4f44b06559d0b0c8","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        except Exception:"},{"line_number":60,"context_line":"            LOG.exception(\"Failed to fetch Monasca alarms.\")"},{"line_number":61,"context_line":"        return []"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def _convert_alarm(self, alarm):"},{"line_number":64,"context_line":"        resource_type, resource_id \u003d self._extract_resource_id(alarm)"},{"line_number":65,"context_line":"        return {"},{"line_number":66,"context_line":"            MProps.ID: alarm[MProps.ID],"},{"line_number":67,"context_line":"            MProps.NAME: extract_field_value(alarm, \u0027alarm_definition\u0027, \u0027name\u0027),"},{"line_number":68,"context_line":"            MProps.RESOURCE_TYPE: resource_type,"},{"line_number":69,"context_line":"            MProps.RESOURCE_ID: resource_id,"},{"line_number":70,"context_line":"            MProps.STATUS: alarm[MProps.STATUS],"},{"line_number":71,"context_line":"            MProps.UPDATE_TIMESTAMP: alarm[MProps.UPDATE_TIMESTAMP]"},{"line_number":72,"context_line":"        }"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def _enrich_alarms(self, alarms):"},{"line_number":75,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_186b451d","line":72,"range":{"start_line":62,"start_character":0,"end_line":72,"end_character":9},"in_reply_to":"3f79a3b5_add69524","updated":"2018-12-05 12:57:05.000000000","message":"It\u0027s not critical, but as you said the driver should fetch the data (and add a few vitrage general props, this is done by the base class make_pickleable() method). The transformer should convert the data to a vertex + neighbour edges.","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"7f2086cf169db6a9cfdb6b2ef44cf7877d02823d","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        return alarm and alarm[MProps.RESOURCE_TYPE] is not None and \\"},{"line_number":86,"context_line":"            alarm[MProps.RESOURCE_ID] is not None"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def _extract_resource_id(self, alarm):"},{"line_number":89,"context_line":"        resource_type \u003d extract_field_value(alarm, \u0027metrics\u0027, 0, \u0027dimensions\u0027, \u0027resource_type\u0027)"},{"line_number":90,"context_line":"        resource_id \u003d extract_field_value(alarm, \u0027metrics\u0027, 0, \u0027dimensions\u0027, \u0027resource_id\u0027)"},{"line_number":91,"context_line":"        return (resource_type, resource_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_9e90a443","line":88,"updated":"2018-12-05 09:09:01.000000000","message":"Resource type and ID are not native dimensions in Monasca. There were introduced for convenience. We should elaborate on more general approach, using dimensions available natively.","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"2495794b4a833a4d424da7260e61a6f57fa713d9","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        return alarm and alarm[MProps.RESOURCE_TYPE] is not None and \\"},{"line_number":86,"context_line":"            alarm[MProps.RESOURCE_ID] is not None"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def _extract_resource_id(self, alarm):"},{"line_number":89,"context_line":"        resource_type \u003d extract_field_value(alarm, \u0027metrics\u0027, 0, \u0027dimensions\u0027, \u0027resource_type\u0027)"},{"line_number":90,"context_line":"        resource_id \u003d extract_field_value(alarm, \u0027metrics\u0027, 0, \u0027dimensions\u0027, \u0027resource_id\u0027)"},{"line_number":91,"context_line":"        return (resource_type, resource_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_cd87510a","line":88,"in_reply_to":"3f79a3b5_4a6247dc","updated":"2018-12-05 12:10:15.000000000","message":"Referring to the Monasca API spec [1] there can be multiple dimensions returned for each alarm. For POC conveniece I added custom dimensions to Monasca Agents (via configuration) residing in VMs that allowed me to include resource_type/resource_id into Monasca measurements. This way I could uniquely determine associated entities in the graph on the Vitrage side.\n\nFor general usage, we may need guidance from Monasca team about how they see Monasca alarms fitting into Vitrage Entity Graph.\n\n[1] https://github.com/openstack/monasca-api/blob/master/docs/monasca-api-spec.md#response-examples-19","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"9dcfbc7404f217593ab66baa21bdea4e9d7cfb74","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        return alarm and alarm[MProps.RESOURCE_TYPE] is not None and \\"},{"line_number":86,"context_line":"            alarm[MProps.RESOURCE_ID] is not None"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def _extract_resource_id(self, alarm):"},{"line_number":89,"context_line":"        resource_type \u003d extract_field_value(alarm, \u0027metrics\u0027, 0, \u0027dimensions\u0027, \u0027resource_type\u0027)"},{"line_number":90,"context_line":"        resource_id \u003d extract_field_value(alarm, \u0027metrics\u0027, 0, \u0027dimensions\u0027, \u0027resource_id\u0027)"},{"line_number":91,"context_line":"        return (resource_type, resource_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_4a6247dc","line":88,"in_reply_to":"3f79a3b5_9e90a443","updated":"2018-12-05 11:11:50.000000000","message":"Ok, let\u0027s discuss it.\n\n@Witek, I\u0027ll be happy to hear your thoughts about it. How can Vitrage identify the resource of the Monasca alarm?","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":16222,"name":"witek","email":"witold.bedyk@suse.com","username":"witek"},"change_message_id":"689f46936dedfdf30b7f64391e30c84630d84efc","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        return alarm and alarm[MProps.RESOURCE_TYPE] is not None and \\"},{"line_number":86,"context_line":"            alarm[MProps.RESOURCE_ID] is not None"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def _extract_resource_id(self, alarm):"},{"line_number":89,"context_line":"        resource_type \u003d extract_field_value(alarm, \u0027metrics\u0027, 0, \u0027dimensions\u0027, \u0027resource_type\u0027)"},{"line_number":90,"context_line":"        resource_id \u003d extract_field_value(alarm, \u0027metrics\u0027, 0, \u0027dimensions\u0027, \u0027resource_id\u0027)"},{"line_number":91,"context_line":"        return (resource_type, resource_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_8eedb38e","line":88,"in_reply_to":"3f79a3b5_cd87510a","updated":"2018-12-06 17:00:33.000000000","message":"Monasca dimensions are generic user-defined key/value pairs which uniquely identify the metric. There are some commonly used dimension names, but in general they will differ depending on the metric. E.g. `disk.space_used_perc` will typically have dimensions like: device, hostname, mount_point.\n\nConfiguring resource_type and resource_id dimensions in agent works perfectly fine for the POC but in general we would need some kind of generic mapping here. Would it be possible to specify dimension name(s) in Vitrage entity definition? These dimension names and corresponding values would identify the resource of the alarm.\n\n\u003e Referring to the Monasca API spec [1] there can be multiple dimensions returned for each alarm.\n\nYes, it depends on how the alarm is defined. E.g. you may want to have one alarm for all mount_points on a host (then you get a list of metrics and dimensions which match that host) or you may define alarm with `match_by\u003dmount_point` resulting with individual alarms for every mount_point.\n\nFor simplicity I think we should start with supporting only the alarms with single associated metric.","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":10311,"name":"Joseph Davis","email":"joseph.davis@suse.com","username":"joadavis"},"change_message_id":"4baa3d1b2126358049bc8339ce458d95a26c8e61","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                                alarms if alarm is not None]"},{"line_number":57,"context_line":"            LOG.debug(\u0027Converted Monasca alarms: %s\u0027 % converted_alarms)"},{"line_number":58,"context_line":"            return converted_alarms"},{"line_number":59,"context_line":"        except Exception:"},{"line_number":60,"context_line":"            LOG.exception(\"Failed to fetch Monasca alarms.\")"},{"line_number":61,"context_line":"        return []"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_84f3c06e","line":59,"range":{"start_line":59,"start_character":8,"end_line":59,"end_character":25},"updated":"2018-12-13 19:18:59.000000000","message":"PyCharm complains about lines like this being too \"generic\". Is there a way to narrow this down to the Exceptions that monasca_client might throw?  I wouldn\u0027t hold back this commit just about this nit. :)","commit_id":"8f3e5002d8b305fd27b766c5b42143708890b7d7"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"86d5346727a821c2a68f32f0c979d3cac2b3ff29","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def _get_alarms(self):"},{"line_number":49,"context_line":"        try:"},{"line_number":50,"context_line":"            return self.client.alarms.list()"},{"line_number":51,"context_line":"        except Exception:"},{"line_number":52,"context_line":"            LOG.exception(\"Failed to fetch Monasca alarms.\")"},{"line_number":53,"context_line":"        return []"}],"source_content_type":"text/x-python","patch_set":7,"id":"bfdaf3ff_587378e8","line":50,"updated":"2019-01-11 22:02:56.000000000","message":"It would be good to catch a more specific exception.","commit_id":"8580b0e25da1058b56d2b62db4d083e6eaa08d91"},{"author":{"_account_id":10311,"name":"Joseph Davis","email":"joseph.davis@suse.com","username":"joadavis"},"change_message_id":"28f81a1cdfad57523b6c1bd7e6811f89cf6396bc","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def _get_alarms(self):"},{"line_number":49,"context_line":"        try:"},{"line_number":50,"context_line":"            return self.client.alarms.list()"},{"line_number":51,"context_line":"        except Exception:"},{"line_number":52,"context_line":"            LOG.exception(\"Failed to fetch Monasca alarms.\")"},{"line_number":53,"context_line":"        return []"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_13ceb52c","line":50,"in_reply_to":"bfdaf3ff_587378e8","updated":"2019-02-12 23:28:21.000000000","message":"Agreed. Though looking at https://github.com/openstack/python-monascaclient/blob/master/monascaclient/common/monasca_manager.py I don\u0027t see an special, meaningful exceptions being thrown, so a generic Exception may be appropriate for now until we do some testing and find real exception cases.","commit_id":"8580b0e25da1058b56d2b62db4d083e6eaa08d91"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"5ea1aa28074e336e0d86f7e2cead989ed0ccb43c","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            alarm[MProps.RESOURCE_TYPE] is not None and \\"},{"line_number":72,"context_line":"            alarm[MProps.RESOURCE_ID] is not None"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @staticmethod"},{"line_number":75,"context_line":"    def should_delete_outdated_entities():"},{"line_number":76,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_e776c1d8","line":76,"range":{"start_line":74,"start_character":0,"end_line":76,"end_character":19},"updated":"2019-02-13 14:45:19.000000000","message":"where is it used?","commit_id":"8580b0e25da1058b56d2b62db4d083e6eaa08d91"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"754781f65ac9ea2faa2b62b31c14df80ec56d927","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            alarm[MProps.RESOURCE_TYPE] is not None and \\"},{"line_number":72,"context_line":"            alarm[MProps.RESOURCE_ID] is not None"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @staticmethod"},{"line_number":75,"context_line":"    def should_delete_outdated_entities():"},{"line_number":76,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_c00a71d0","line":76,"range":{"start_line":74,"start_character":0,"end_line":76,"end_character":19},"in_reply_to":"9fdfeff1_e776c1d8","updated":"2019-02-14 13:05:38.000000000","message":"It is recommended for datasources that use PULL method (i.e. support get_all but not notifications). If this function returns True (the default is False), then the consistency enforcer deletes entities that were not updated in the last 2 cycles. This is required in order to support deletion of outdated entities after a vitrage-graph restart, when all caches were deleted.","commit_id":"8580b0e25da1058b56d2b62db4d083e6eaa08d91"}],"vitrage/datasources/monasca/transformer.py":[{"author":{"_account_id":10311,"name":"Joseph Davis","email":"joseph.davis@suse.com","username":"joadavis"},"change_message_id":"4baa3d1b2126358049bc8339ce458d95a26c8e61","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from vitrage.datasources.alarm_transformer_base import AlarmTransformerBase"},{"line_number":21,"context_line":"from vitrage.datasources.monasca import MONASCA_DATASOURCE"},{"line_number":22,"context_line":"from vitrage.datasources.monasca.properties import MonascaProperties as MProps"},{"line_number":23,"context_line":"from vitrage.datasources.monasca.properties import MonascaAlarmStatuses as MAlarmStatuses"},{"line_number":24,"context_line":"from vitrage.datasources import transformer_base as tbase"},{"line_number":25,"context_line":"import vitrage.graph.utils as graph_utils"},{"line_number":26,"context_line":"from vitrage.utils import datetime as datetime_utils"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_df5c211d","line":23,"range":{"start_line":23,"start_character":72,"end_line":23,"end_character":89},"updated":"2018-12-13 19:18:59.000000000","message":"Pep8 is picky about line lengths and complained here.","commit_id":"8f3e5002d8b305fd27b766c5b42143708890b7d7"},{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"e4044e3042b778b25e0b6c3a20d9735935b93554","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from vitrage.datasources.alarm_transformer_base import AlarmTransformerBase"},{"line_number":21,"context_line":"from vitrage.datasources.monasca import MONASCA_DATASOURCE"},{"line_number":22,"context_line":"from vitrage.datasources.monasca.properties import MonascaProperties as MProps"},{"line_number":23,"context_line":"from vitrage.datasources.monasca.properties import MonascaAlarmStatuses as MAlarmStatuses"},{"line_number":24,"context_line":"from vitrage.datasources import transformer_base as tbase"},{"line_number":25,"context_line":"import vitrage.graph.utils as graph_utils"},{"line_number":26,"context_line":"from vitrage.utils import datetime as datetime_utils"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f769fc5_8d99d520","line":23,"range":{"start_line":23,"start_character":72,"end_line":23,"end_character":89},"in_reply_to":"3f79a3b5_df5c211d","updated":"2018-12-23 14:52:44.000000000","message":"Done","commit_id":"8f3e5002d8b305fd27b766c5b42143708890b7d7"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"86d5346727a821c2a68f32f0c979d3cac2b3ff29","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class MonascaTransformer(AlarmTransformerBase):"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def __init__(self, transformers, conf):"},{"line_number":33,"context_line":"        super(MonascaTransformer, self).__init__(transformers, conf)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def _create_snapshot_entity_vertex(self, entity_event):"},{"line_number":36,"context_line":"        return self._create_vertex(entity_event)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bfdaf3ff_58ae182f","line":33,"range":{"start_line":32,"start_character":4,"end_line":33,"end_character":68},"updated":"2019-01-11 22:02:56.000000000","message":"Please, delete this __init__ method. We don\u0027t need it","commit_id":"8580b0e25da1058b56d2b62db4d083e6eaa08d91"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"5ea1aa28074e336e0d86f7e2cead989ed0ccb43c","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        sample_timestamp \u003d entity_event[DSProps.SAMPLE_DATE]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        name \u003d extract_field_value("},{"line_number":46,"context_line":"            entity_event, \u0027alarm_definition\u0027, \u0027name\u0027)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        metadata \u003d {"},{"line_number":49,"context_line":"            VProps.NAME: name,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_070bc529","line":46,"range":{"start_line":46,"start_character":26,"end_line":46,"end_character":52},"updated":"2019-02-13 14:45:19.000000000","message":"are monasca properties ?\nif so, add them to properties","commit_id":"8580b0e25da1058b56d2b62db4d083e6eaa08d91"}],"vitrage/os_clients.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"9dcfbc7404f217593ab66baa21bdea4e9d7cfb74","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    cfg.StrOpt(\u0027mistral_version\u0027, default\u003d\u00272\u0027, help\u003d\u0027Mistral version\u0027),"},{"line_number":31,"context_line":"    cfg.StrOpt(\u0027gnocchi_version\u0027, default\u003d\u00271\u0027, help\u003d\u0027Gnocchi version\u0027),"},{"line_number":32,"context_line":"    cfg.StrOpt(\u0027monasca_version\u0027, default\u003d\u00272\u0027, help\u003d\u0027Monasca version\u0027),"},{"line_number":33,"context_line":"    cfg.StrOpt(\u0027monasca_url\u0027, help\u003d\u0027Monasca API URL\u0027),"},{"line_number":34,"context_line":"    cfg.StrOpt(\u0027monasca_username\u0027, help\u003d\u0027Monasca username\u0027),"},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027monasca_password\u0027, help\u003d\u0027Monasca password\u0027),"},{"line_number":36,"context_line":"    cfg.StrOpt(\u0027monasca_project_name\u0027, help\u003d\u0027Monasca project name\u0027)"},{"line_number":37,"context_line":"]"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"_client_modules \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_2aaa6bcf","line":36,"range":{"start_line":33,"start_character":0,"end_line":36,"end_character":67},"updated":"2018-12-05 11:11:50.000000000","message":"These should be moved under Monasca datatsource opts.\nVitrage automatically reads all OPTS from folders under the datasources path that have a driver in them. \n\nFor example see https://github.com/openstack/vitrage/blob/master/vitrage/datasources/zabbix/__init__.py","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"2495794b4a833a4d424da7260e61a6f57fa713d9","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    cfg.StrOpt(\u0027mistral_version\u0027, default\u003d\u00272\u0027, help\u003d\u0027Mistral version\u0027),"},{"line_number":31,"context_line":"    cfg.StrOpt(\u0027gnocchi_version\u0027, default\u003d\u00271\u0027, help\u003d\u0027Gnocchi version\u0027),"},{"line_number":32,"context_line":"    cfg.StrOpt(\u0027monasca_version\u0027, default\u003d\u00272\u0027, help\u003d\u0027Monasca version\u0027),"},{"line_number":33,"context_line":"    cfg.StrOpt(\u0027monasca_url\u0027, help\u003d\u0027Monasca API URL\u0027),"},{"line_number":34,"context_line":"    cfg.StrOpt(\u0027monasca_username\u0027, help\u003d\u0027Monasca username\u0027),"},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027monasca_password\u0027, help\u003d\u0027Monasca password\u0027),"},{"line_number":36,"context_line":"    cfg.StrOpt(\u0027monasca_project_name\u0027, help\u003d\u0027Monasca project name\u0027)"},{"line_number":37,"context_line":"]"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"_client_modules \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_ad553553","line":36,"range":{"start_line":33,"start_character":0,"end_line":36,"end_character":67},"in_reply_to":"3f79a3b5_2aaa6bcf","updated":"2018-12-05 12:10:15.000000000","message":"Definitely, will fix.","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"e4044e3042b778b25e0b6c3a20d9735935b93554","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    cfg.StrOpt(\u0027mistral_version\u0027, default\u003d\u00272\u0027, help\u003d\u0027Mistral version\u0027),"},{"line_number":31,"context_line":"    cfg.StrOpt(\u0027gnocchi_version\u0027, default\u003d\u00271\u0027, help\u003d\u0027Gnocchi version\u0027),"},{"line_number":32,"context_line":"    cfg.StrOpt(\u0027monasca_version\u0027, default\u003d\u00272\u0027, help\u003d\u0027Monasca version\u0027),"},{"line_number":33,"context_line":"    cfg.StrOpt(\u0027monasca_url\u0027, help\u003d\u0027Monasca API URL\u0027),"},{"line_number":34,"context_line":"    cfg.StrOpt(\u0027monasca_username\u0027, help\u003d\u0027Monasca username\u0027),"},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027monasca_password\u0027, help\u003d\u0027Monasca password\u0027),"},{"line_number":36,"context_line":"    cfg.StrOpt(\u0027monasca_project_name\u0027, help\u003d\u0027Monasca project name\u0027)"},{"line_number":37,"context_line":"]"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"_client_modules \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f769fc5_adfcd13e","line":36,"range":{"start_line":33,"start_character":0,"end_line":36,"end_character":67},"in_reply_to":"3f79a3b5_ad553553","updated":"2018-12-23 14:52:44.000000000","message":"Done","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"9dcfbc7404f217593ab66baa21bdea4e9d7cfb74","unresolved":false,"context_lines":[{"line_number":189,"context_line":"            auth_url\u003dconf.service_credentials.auth_url,"},{"line_number":190,"context_line":"            username\u003dconf.monasca_username,"},{"line_number":191,"context_line":"            password\u003dconf.monasca_password,"},{"line_number":192,"context_line":"            user_domain_name\u003d\u0027default\u0027,"},{"line_number":193,"context_line":"            project_name\u003dconf.monasca_project_name,"},{"line_number":194,"context_line":"            project_domain_name\u003d\u0027default\u0027"},{"line_number":195,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_2a834b51","line":192,"range":{"start_line":192,"start_character":12,"end_line":192,"end_character":38},"updated":"2018-12-05 11:11:50.000000000","message":"Is it always \u0027default\u0027?","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"2495794b4a833a4d424da7260e61a6f57fa713d9","unresolved":false,"context_lines":[{"line_number":189,"context_line":"            auth_url\u003dconf.service_credentials.auth_url,"},{"line_number":190,"context_line":"            username\u003dconf.monasca_username,"},{"line_number":191,"context_line":"            password\u003dconf.monasca_password,"},{"line_number":192,"context_line":"            user_domain_name\u003d\u0027default\u0027,"},{"line_number":193,"context_line":"            project_name\u003dconf.monasca_project_name,"},{"line_number":194,"context_line":"            project_domain_name\u003d\u0027default\u0027"},{"line_number":195,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_8dc5d90a","line":192,"range":{"start_line":192,"start_character":12,"end_line":192,"end_character":38},"in_reply_to":"3f79a3b5_2a834b51","updated":"2018-12-05 12:10:15.000000000","message":"No, this is for POC convenience. We should add it to the configuration and set default there. Will fix.","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"e4044e3042b778b25e0b6c3a20d9735935b93554","unresolved":false,"context_lines":[{"line_number":189,"context_line":"            auth_url\u003dconf.service_credentials.auth_url,"},{"line_number":190,"context_line":"            username\u003dconf.monasca_username,"},{"line_number":191,"context_line":"            password\u003dconf.monasca_password,"},{"line_number":192,"context_line":"            user_domain_name\u003d\u0027default\u0027,"},{"line_number":193,"context_line":"            project_name\u003dconf.monasca_project_name,"},{"line_number":194,"context_line":"            project_domain_name\u003d\u0027default\u0027"},{"line_number":195,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f769fc5_cdf90d4e","line":192,"range":{"start_line":192,"start_character":12,"end_line":192,"end_character":38},"in_reply_to":"3f79a3b5_8dc5d90a","updated":"2018-12-23 14:52:44.000000000","message":"Done","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"2495794b4a833a4d424da7260e61a6f57fa713d9","unresolved":false,"context_lines":[{"line_number":191,"context_line":"            password\u003dconf.monasca_password,"},{"line_number":192,"context_line":"            user_domain_name\u003d\u0027default\u0027,"},{"line_number":193,"context_line":"            project_name\u003dconf.monasca_project_name,"},{"line_number":194,"context_line":"            project_domain_name\u003d\u0027default\u0027"},{"line_number":195,"context_line":"        )"},{"line_number":196,"context_line":"        session \u003d session.Session(auth\u003dauth)"},{"line_number":197,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_6dd07dc7","line":194,"updated":"2018-12-05 12:10:15.000000000","message":"Similarly, this parameter should also be moved to Monasca configuration.","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"e4044e3042b778b25e0b6c3a20d9735935b93554","unresolved":false,"context_lines":[{"line_number":191,"context_line":"            password\u003dconf.monasca_password,"},{"line_number":192,"context_line":"            user_domain_name\u003d\u0027default\u0027,"},{"line_number":193,"context_line":"            project_name\u003dconf.monasca_project_name,"},{"line_number":194,"context_line":"            project_domain_name\u003d\u0027default\u0027"},{"line_number":195,"context_line":"        )"},{"line_number":196,"context_line":"        session \u003d session.Session(auth\u003dauth)"},{"line_number":197,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1f769fc5_6d9479e9","line":194,"in_reply_to":"3f79a3b5_6dd07dc7","updated":"2018-12-23 14:52:44.000000000","message":"Done","commit_id":"47d53c15f1f3cf86f9fe6103973fb2cac61d681f"},{"author":{"_account_id":10311,"name":"Joseph Davis","email":"joseph.davis@suse.com","username":"joadavis"},"change_message_id":"4baa3d1b2126358049bc8339ce458d95a26c8e61","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        )"},{"line_number":202,"context_line":"        LOG.info(\u0027Monasca client created\u0027)"},{"line_number":203,"context_line":"        return client"},{"line_number":204,"context_line":"    except Exception:"},{"line_number":205,"context_line":"        LOG.exception(\u0027Create Monasca client - Got Exception.\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_9f3d49bb","line":204,"range":{"start_line":204,"start_character":4,"end_line":204,"end_character":21},"updated":"2018-12-13 19:18:59.000000000","message":"Again, you may find it useful to split out a few of the possible Exception causes and log different messages to make it easier to debug. For instance, the difference between a auth failure due to bad password vs. the Monasca API being down.","commit_id":"8f3e5002d8b305fd27b766c5b42143708890b7d7"}]}
