)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"60b2f636b3b1b2bca3a4f49970b16daa0e5a83f6","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"We also need to bind mount /run/log in the container so the IPA service"},{"line_number":21,"context_line":"can have access to the journal."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Change-Id: Ie507e2e5c58cffa255bbfb2fa5ffb95cb98ed8c4"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"dae33548_484d666b","line":22,"updated":"2016-02-16 18:11:07.000000000","message":"This seems like a major feature which will need some work in Ironic as well. Can we file an RFE bug and tag it here?","commit_id":"39d48bcba8244c9a8b4a3330f10185facd1cbbec"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"5fc81edc89b27847a0f9d62fe3e095b4602542fc","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The log extension is responsible for retrieving logs from the system,"},{"line_number":10,"context_line":"if journalctl is present the logs will come from it, otherwise we"},{"line_number":11,"context_line":"fallback from getting the logs from the /var/log directory + dmesg logs."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"In the coreos ramdisk, the we need to bind mount /run/log in the container"},{"line_number":14,"context_line":"so the IPA service can have access to the journal."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3aaa91ec_03c94726","line":11,"updated":"2016-06-24 14:46:12.000000000","message":"s/from/to","commit_id":"eb3384fc2e48f1f92df564ab7cb3da459cbc9bf2"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"4f5220b4dc2d1b1f0d99504c6c0470a07428bc55","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The log extension is responsible for retrieving logs from the system,"},{"line_number":10,"context_line":"if journalctl is present the logs will come from it, otherwise we"},{"line_number":11,"context_line":"fallback from getting the logs from the /var/log directory + dmesg logs."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"In the coreos ramdisk, the we need to bind mount /run/log in the container"},{"line_number":14,"context_line":"so the IPA service can have access to the journal."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3aaa91ec_3ee578db","line":11,"in_reply_to":"3aaa91ec_03c94726","updated":"2016-06-24 14:52:18.000000000","message":"Done","commit_id":"eb3384fc2e48f1f92df564ab7cb3da459cbc9bf2"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"5fc81edc89b27847a0f9d62fe3e095b4602542fc","unresolved":false,"context_lines":[{"line_number":10,"context_line":"if journalctl is present the logs will come from it, otherwise we"},{"line_number":11,"context_line":"fallback from getting the logs from the /var/log directory + dmesg logs."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"In the coreos ramdisk, the we need to bind mount /run/log in the container"},{"line_number":14,"context_line":"so the IPA service can have access to the journal."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"For the tinyIPA ramdisk, the from IPA are now being redirected to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3aaa91ec_23eba379","line":13,"updated":"2016-06-24 14:46:12.000000000","message":"s/the //","commit_id":"eb3384fc2e48f1f92df564ab7cb3da459cbc9bf2"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"4f5220b4dc2d1b1f0d99504c6c0470a07428bc55","unresolved":false,"context_lines":[{"line_number":10,"context_line":"if journalctl is present the logs will come from it, otherwise we"},{"line_number":11,"context_line":"fallback from getting the logs from the /var/log directory + dmesg logs."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"In the coreos ramdisk, the we need to bind mount /run/log in the container"},{"line_number":14,"context_line":"so the IPA service can have access to the journal."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"For the tinyIPA ramdisk, the from IPA are now being redirected to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3aaa91ec_1eea3cac","line":13,"in_reply_to":"3aaa91ec_23eba379","updated":"2016-06-24 14:52:18.000000000","message":"Done","commit_id":"eb3384fc2e48f1f92df564ab7cb3da459cbc9bf2"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"5fc81edc89b27847a0f9d62fe3e095b4602542fc","unresolved":false,"context_lines":[{"line_number":13,"context_line":"In the coreos ramdisk, the we need to bind mount /run/log in the container"},{"line_number":14,"context_line":"so the IPA service can have access to the journal."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"For the tinyIPA ramdisk, the from IPA are now being redirected to"},{"line_number":17,"context_line":"/var/logs/ironic-python-agent.log instead of only going to the default"},{"line_number":18,"context_line":"stdout."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3aaa91ec_439d0f09","line":16,"updated":"2016-06-24 14:46:12.000000000","message":"s/the/the logs","commit_id":"eb3384fc2e48f1f92df564ab7cb3da459cbc9bf2"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"4f5220b4dc2d1b1f0d99504c6c0470a07428bc55","unresolved":false,"context_lines":[{"line_number":13,"context_line":"In the coreos ramdisk, the we need to bind mount /run/log in the container"},{"line_number":14,"context_line":"so the IPA service can have access to the journal."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"For the tinyIPA ramdisk, the from IPA are now being redirected to"},{"line_number":17,"context_line":"/var/logs/ironic-python-agent.log instead of only going to the default"},{"line_number":18,"context_line":"stdout."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3aaa91ec_7ed38004","line":16,"in_reply_to":"3aaa91ec_439d0f09","updated":"2016-06-24 14:52:18.000000000","message":"Done","commit_id":"eb3384fc2e48f1f92df564ab7cb3da459cbc9bf2"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"e7d50c17f832b13f2a5b056341969d181955ecc8","unresolved":false,"context_lines":[{"line_number":17,"context_line":"/var/logs/ironic-python-agent.log instead of only going to the default"},{"line_number":18,"context_line":"stdout."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Inspector now shares the same method of collecting logs, extending it\u0027s"},{"line_number":21,"context_line":"capabilities for non-systemd systems."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Partial-Bug: #1587143"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"3aaa91ec_36055f45","line":20,"updated":"2016-06-27 12:07:07.000000000","message":"Nit: \"its\"","commit_id":"cf2f9ea77ac0ee12b7ca8270f0cb9004ff1e470f"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"2a46382850681373f011d51b44e891822b6712d5","unresolved":false,"context_lines":[{"line_number":17,"context_line":"/var/logs/ironic-python-agent.log instead of only going to the default"},{"line_number":18,"context_line":"stdout."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Inspector now shares the same method of collecting logs, extending it\u0027s"},{"line_number":21,"context_line":"capabilities for non-systemd systems."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Partial-Bug: #1587143"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"3aaa91ec_c20b3d7c","line":20,"in_reply_to":"3aaa91ec_36055f45","updated":"2016-06-28 10:27:55.000000000","message":"thanks, will fix if I happen to submit a new patch-set","commit_id":"cf2f9ea77ac0ee12b7ca8270f0cb9004ff1e470f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"8e39c0bfe330d3cfbf9f8315bfb458798626851c","unresolved":false,"context_lines":[{"line_number":20,"context_line":"Inspector now shares the same method of collecting logs, extending its"},{"line_number":21,"context_line":"capabilities for non-systemd systems."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Partial-Bug: #1587143"},{"line_number":24,"context_line":"Change-Id: Ie507e2e5c58cffa255bbfb2fa5ffb95cb98ed8c4"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"3aaa91ec_05c6a867","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":11},"updated":"2016-06-29 12:54:26.000000000","message":"please change to Closes-Bug if you happen to create another changeset. it only affects the IPA side of the bug.","commit_id":"af81914ce7309b23edcccc030d40f59f98fc258e"}],"imagebuild/tinyipa/build_files/bootlocal.sh":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"7a1a200356f9354336fa1cc42061b8bc5ea974b5","unresolved":false,"context_lines":[{"line_number":22,"context_line":"# Run IPA"},{"line_number":23,"context_line":"echo \"Starting Ironic Python Agent:\""},{"line_number":24,"context_line":"date"},{"line_number":25,"context_line":"ironic-python-agent 2\u003e\u00261 | tee /var/log/ironic-python-agent.log"}],"source_content_type":"text/x-sh","patch_set":12,"id":"3aaa91ec_d3be6663","line":25,"range":{"start_line":25,"start_character":20,"end_line":25,"end_character":63},"updated":"2016-06-28 13:15:48.000000000","message":"I\u0027d prefer this to be done via Python logging module, but it can wait","commit_id":"cf2f9ea77ac0ee12b7ca8270f0cb9004ff1e470f"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d961463088b53b691853a9ad9bfb93fb2a4726b8","unresolved":false,"context_lines":[{"line_number":22,"context_line":"# Run IPA"},{"line_number":23,"context_line":"echo \"Starting Ironic Python Agent:\""},{"line_number":24,"context_line":"date"},{"line_number":25,"context_line":"ironic-python-agent 2\u003e\u00261 | tee /var/log/ironic-python-agent.log"}],"source_content_type":"text/x-sh","patch_set":12,"id":"3aaa91ec_90ca094e","line":25,"range":{"start_line":25,"start_character":20,"end_line":25,"end_character":63},"in_reply_to":"3aaa91ec_d3be6663","updated":"2016-06-28 15:52:23.000000000","message":"right on","commit_id":"cf2f9ea77ac0ee12b7ca8270f0cb9004ff1e470f"}],"ironic_python_agent/extensions/log.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"a904ad9a1be6996f919f5b61b44df4b0d436f883","unresolved":false,"context_lines":[{"line_number":22,"context_line":"class LogExtension(base.BaseAgentExtension):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    @base.sync_command(\u0027collect_system_logs\u0027)"},{"line_number":25,"context_line":"    def collect_system_logs(self):"},{"line_number":26,"context_line":"        \"\"\"Query the contents of the systemd journal."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        :raises: CommandExecutionError if failed to collect the system logs."}],"source_content_type":"text/x-python","patch_set":9,"id":"9abb7d3a_f0185020","line":25,"updated":"2016-05-31 23:47:37.000000000","message":"I honestly would prefer this look in a static location and the ramdisks be modified to match. That way we have a stable interface for folks wanting to add a new ramdisk.\n\nIt should be trivial to configure the existing CoreOS ramdisk to log to /var/log, and I can help with this if you\u0027d like.","commit_id":"85d6d4aa0b28a6fd6ad83e00ac58ba65723d3171"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"0b250bbaa470db314df01c20fb17e18ba26931d1","unresolved":false,"context_lines":[{"line_number":22,"context_line":"class LogExtension(base.BaseAgentExtension):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    @base.sync_command(\u0027collect_system_logs\u0027)"},{"line_number":25,"context_line":"    def collect_system_logs(self):"},{"line_number":26,"context_line":"        \"\"\"Query the contents of the systemd journal."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        :raises: CommandExecutionError if failed to collect the system logs."}],"source_content_type":"text/x-python","patch_set":9,"id":"9abb7d3a_e7e038cf","line":25,"in_reply_to":"9abb7d3a_04fe1a05","updated":"2016-06-02 13:01:20.000000000","message":"Ok, so the proxy should multiplex all the logs into a single file. You know if it\u0027s supported Jay ?\n\n/me will google about it.","commit_id":"85d6d4aa0b28a6fd6ad83e00ac58ba65723d3171"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"8216088b86693a109be26af2ccbfebe8d481ab9d","unresolved":false,"context_lines":[{"line_number":22,"context_line":"class LogExtension(base.BaseAgentExtension):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    @base.sync_command(\u0027collect_system_logs\u0027)"},{"line_number":25,"context_line":"    def collect_system_logs(self):"},{"line_number":26,"context_line":"        \"\"\"Query the contents of the systemd journal."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        :raises: CommandExecutionError if failed to collect the system logs."}],"source_content_type":"text/x-python","patch_set":9,"id":"9abb7d3a_7ca1ae45","line":25,"in_reply_to":"9abb7d3a_376c809b","updated":"2016-06-01 16:47:25.000000000","message":"For systemd-based images (like the CoreOS ramdisk), you literally start an additional service and it proxies the journal to a normal syslog. I suspect ironic-inspectord could potentially proxy the logs through in the same way.","commit_id":"85d6d4aa0b28a6fd6ad83e00ac58ba65723d3171"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"028ad751a4eecb4c6c91f40bf47db9ad425cea3c","unresolved":false,"context_lines":[{"line_number":22,"context_line":"class LogExtension(base.BaseAgentExtension):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    @base.sync_command(\u0027collect_system_logs\u0027)"},{"line_number":25,"context_line":"    def collect_system_logs(self):"},{"line_number":26,"context_line":"        \"\"\"Query the contents of the systemd journal."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        :raises: CommandExecutionError if failed to collect the system logs."}],"source_content_type":"text/x-python","patch_set":9,"id":"9abb7d3a_04fe1a05","line":25,"in_reply_to":"9abb7d3a_7ca1ae45","updated":"2016-06-02 12:33:59.000000000","message":"I\u0027m fine with anything that will lead us to receiving a file called \"journal\" with roughly the same contents :) however, there is already some buffering in journalctl which sometimes results in receiving incomplete logs. I wonder if your solution will make it even worse..","commit_id":"85d6d4aa0b28a6fd6ad83e00ac58ba65723d3171"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5be824a4dd4ee381116355f2899aba0b8bdfb11d","unresolved":false,"context_lines":[{"line_number":22,"context_line":"class LogExtension(base.BaseAgentExtension):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    @base.sync_command(\u0027collect_system_logs\u0027)"},{"line_number":25,"context_line":"    def collect_system_logs(self):"},{"line_number":26,"context_line":"        \"\"\"Query the contents of the systemd journal."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        :raises: CommandExecutionError if failed to collect the system logs."}],"source_content_type":"text/x-python","patch_set":9,"id":"9abb7d3a_376c809b","line":25,"in_reply_to":"9abb7d3a_f0185020","updated":"2016-06-01 09:08:58.000000000","message":"I think it\u0027s a good idea, some points on it:\n\n* About the scope, this is only about the IPA service, making it log to a file under /var/log or the whole system?\n\n* Inspector has a similar method to collect the logs and right now they only use journald, I want to keep this code in a way we can share between both services. What I mean is, I may still need to get the logs from journald so I don\u0027t change inspector\u0027s behavior.","commit_id":"85d6d4aa0b28a6fd6ad83e00ac58ba65723d3171"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"8fc806a48bb8bfa112cc8f6577d8233c39c819c8","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        else:"},{"line_number":39,"context_line":"            dmesg \u003d utils.get_dmesg_logs()"},{"line_number":40,"context_line":"            io_dict[\u0027dmesg\u0027] \u003d io.BytesIO(bytes(dmesg))"},{"line_number":41,"context_line":"            file_list.append(\u0027/var/log\u0027)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        return {\u0027system_logs\u0027: utils.gzip_and_b64encode(io_dict\u003dio_dict,"},{"line_number":44,"context_line":"                                                        file_list\u003dfile_list)}"}],"source_content_type":"text/x-python","patch_set":9,"id":"9abb7d3a_ef135db6","line":41,"updated":"2016-05-31 18:15:20.000000000","message":"this whole function should be common between inspection and deployment, not only the journald log","commit_id":"85d6d4aa0b28a6fd6ad83e00ac58ba65723d3171"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5be824a4dd4ee381116355f2899aba0b8bdfb11d","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        else:"},{"line_number":39,"context_line":"            dmesg \u003d utils.get_dmesg_logs()"},{"line_number":40,"context_line":"            io_dict[\u0027dmesg\u0027] \u003d io.BytesIO(bytes(dmesg))"},{"line_number":41,"context_line":"            file_list.append(\u0027/var/log\u0027)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        return {\u0027system_logs\u0027: utils.gzip_and_b64encode(io_dict\u003dio_dict,"},{"line_number":44,"context_line":"                                                        file_list\u003dfile_list)}"}],"source_content_type":"text/x-python","patch_set":9,"id":"9abb7d3a_1b0fe888","line":41,"in_reply_to":"9abb7d3a_ef135db6","updated":"2016-06-01 09:08:58.000000000","message":"+1 for the idea, but we should do it in a separated patch since this would introduce another feature. I think patches should try to do one and only one thing.\n\nSo I will put a following patch depending on this that does it, is it ok?\n\n...\n\nAs a side, instead of having 2 method to collect logs, do you foresee both services (inspector and ironic) reusing the same extension/method for collecting logs?","commit_id":"85d6d4aa0b28a6fd6ad83e00ac58ba65723d3171"}],"ironic_python_agent/extensions/logs.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6e6b3f506bdb90a1ce7bd3ffb843cccc5c8519ce","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    :param max_lines: The maximum number of lines. If None, there\u0027s no limit."},{"line_number":69,"context_line":"    \"\"\""},{"line_number":70,"context_line":"    cmd \u003d [\u0027journalctl\u0027, \u0027-p\u0027, \u0027debug\u0027, \u0027-b\u0027, \u0027-o\u0027, \u0027short\u0027, \u0027--no-pager\u0027]"},{"line_number":71,"context_line":"    [cmd.extend([\u0027-u\u0027, unit]) for unit in SERVICES_NAME]"},{"line_number":72,"context_line":"    if max_lines is not None:"},{"line_number":73,"context_line":"        cmd.extend([\u0027-n\u0027, str(max_lines)])"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_780c7594","line":71,"updated":"2015-11-23 17:42:01.000000000","message":"I\u0027d suggest getting all logs...","commit_id":"f3272e520ab1a0a906a8fa3c2d39b5ffb88405b9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6e6b3f506bdb90a1ce7bd3ffb843cccc5c8519ce","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    try:"},{"line_number":76,"context_line":"        with open(\"%s/journald\" % dir_path, \u0027w\u0027) as f:"},{"line_number":77,"context_line":"            f.writelines(utils.execute(*cmd)[0])"},{"line_number":78,"context_line":"    except processutils.ProcessExecutionError as e:"},{"line_number":79,"context_line":"        LOG.error(\u0027Error getting logs from journald units %(units)s. \u0027"},{"line_number":80,"context_line":"                  \u0027Error: %(error)s\u0027, {\u0027units\u0027: \u0027,\u0027.join(SERVICES_NAME),"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_98a2794a","line":77,"updated":"2015-11-23 17:42:01.000000000","message":"why have a temporary file if you\u0027re still going to read it in memory?","commit_id":"f3272e520ab1a0a906a8fa3c2d39b5ffb88405b9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6e6b3f506bdb90a1ce7bd3ffb843cccc5c8519ce","unresolved":false,"context_lines":[{"line_number":129,"context_line":"class LogsExtension(base.BaseAgentExtension):"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    @base.sync_command(\u0027collect_deploy_logs\u0027)"},{"line_number":132,"context_line":"    def collect_deploy_logs(max_lines\u003dNone):"},{"line_number":133,"context_line":"        \"\"\"Collect from the IPA service and dmesg."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        :param max_lines: The maximum number of lines. If None, there\u0027s"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_b8797dfe","line":132,"updated":"2015-11-23 17:42:01.000000000","message":"one more useful extension would be \"since\" argument accepting datetime. at least journalctl supports it","commit_id":"f3272e520ab1a0a906a8fa3c2d39b5ffb88405b9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6e6b3f506bdb90a1ce7bd3ffb843cccc5c8519ce","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                  of a gzipped and base64 encoded string of the file with"},{"line_number":139,"context_line":"                  the logs."},{"line_number":140,"context_line":"        \"\"\""},{"line_number":141,"context_line":"        dir_path \u003d tempfile.mkdtemp()"},{"line_number":142,"context_line":"        LOG.debug(\u0027Logs temporary directory: %s\u0027, dir_path)"},{"line_number":143,"context_line":"        get_dmesg_logs(dir_path, max_lines)"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_78d1d5cc","line":141,"updated":"2015-11-23 17:42:01.000000000","message":"please clean this directory on finishing","commit_id":"f3272e520ab1a0a906a8fa3c2d39b5ffb88405b9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6e6b3f506bdb90a1ce7bd3ffb843cccc5c8519ce","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        \"\"\""},{"line_number":141,"context_line":"        dir_path \u003d tempfile.mkdtemp()"},{"line_number":142,"context_line":"        LOG.debug(\u0027Logs temporary directory: %s\u0027, dir_path)"},{"line_number":143,"context_line":"        get_dmesg_logs(dir_path, max_lines)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        init_system \u003d get_init_system()"},{"line_number":146,"context_line":"        if init_system \u003d\u003d \u0027systemd\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_d807a17f","line":143,"updated":"2015-11-23 17:42:01.000000000","message":"why get dmesg log when you already have journald logs?","commit_id":"f3272e520ab1a0a906a8fa3c2d39b5ffb88405b9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6e6b3f506bdb90a1ce7bd3ffb843cccc5c8519ce","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        if init_system \u003d\u003d \u0027systemd\u0027:"},{"line_number":147,"context_line":"            get_journald_logs(dir_path, max_lines)"},{"line_number":148,"context_line":"        elif init_system \u003d\u003d \u0027upstart\u0027:"},{"line_number":149,"context_line":"            get_upstart_logs(dir_path, max_lines)"},{"line_number":150,"context_line":"        else:"},{"line_number":151,"context_line":"            get_sysv_logs(dir_path, max_lines)"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_f8770500","line":149,"updated":"2015-11-23 17:42:01.000000000","message":"do we plan on supporting something that does not have systemd yet?","commit_id":"f3272e520ab1a0a906a8fa3c2d39b5ffb88405b9"}],"ironic_python_agent/inspector.py":[{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"2a461108755da98420b7de529ba3bf056fc8440e","unresolved":false,"context_lines":[{"line_number":270,"context_line":"    :param failures: AccumulatedFailures object"},{"line_number":271,"context_line":"    \"\"\""},{"line_number":272,"context_line":"    try:"},{"line_number":273,"context_line":"        logs \u003d utils.get_journald_logs(lines\u003d10000)"},{"line_number":274,"context_line":"    except errors.CommandExecutionError:"},{"line_number":275,"context_line":"        return"},{"line_number":276,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a8ffd7b_a65d12eb","line":273,"updated":"2015-11-25 05:32:57.000000000","message":"Not the major part in this patch, just a little nit: Can we add a configuration to set the \u0027lines\u0027 instead of 10000?","commit_id":"85af20e5ac837c194f5d4d6b9eff7827543e367a"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"dddb41c54cf65ac89d15947d9561b5c3aeed2347","unresolved":false,"context_lines":[{"line_number":270,"context_line":"    :param failures: AccumulatedFailures object"},{"line_number":271,"context_line":"    \"\"\""},{"line_number":272,"context_line":"    try:"},{"line_number":273,"context_line":"        logs \u003d utils.get_journald_logs(lines\u003d10000)"},{"line_number":274,"context_line":"    except errors.CommandExecutionError:"},{"line_number":275,"context_line":"        return"},{"line_number":276,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a8ffd7b_aea865dc","line":273,"in_reply_to":"9a8ffd7b_a65d12eb","updated":"2015-11-25 15:59:06.000000000","message":"Hi there, \n\nYes, tho I would do that as a follow up of this patch. Because I think it\u0027s outside of the scope of this patch to change inspector, this patch just refactor this code to make it usable on other modules but keep the same behavior here.\n\nI will later post a follow up patch changing it for inspector, if you agree with it.","commit_id":"85af20e5ac837c194f5d4d6b9eff7827543e367a"},{"author":{"_account_id":14810,"name":"Kan","email":"sofaopenstack@gmail.com","username":"Kan"},"change_message_id":"c1ec66c58f98a318385eb9fbadbfbe0be98139d5","unresolved":false,"context_lines":[{"line_number":270,"context_line":"    :param failures: AccumulatedFailures object"},{"line_number":271,"context_line":"    \"\"\""},{"line_number":272,"context_line":"    try:"},{"line_number":273,"context_line":"        logs \u003d utils.get_journald_logs(lines\u003d10000)"},{"line_number":274,"context_line":"    except errors.CommandExecutionError:"},{"line_number":275,"context_line":"        return"},{"line_number":276,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a8ffd7b_493f57d6","line":273,"in_reply_to":"9a8ffd7b_aea865dc","updated":"2015-11-26 04:55:48.000000000","message":"Sure, I understand that. Looking forward for your new patch. Thanks Lucas.","commit_id":"85af20e5ac837c194f5d4d6b9eff7827543e367a"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"7a1a200356f9354336fa1cc42061b8bc5ea974b5","unresolved":false,"context_lines":[{"line_number":332,"context_line":"    \"\"\""},{"line_number":333,"context_line":"    try:"},{"line_number":334,"context_line":"        data[\u0027logs\u0027] \u003d utils.collect_system_logs(journald_max_lines\u003d10000)"},{"line_number":335,"context_line":"    except errors.CommandExecutionError:"},{"line_number":336,"context_line":"        return"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_f349e28f","line":335,"range":{"start_line":335,"start_character":11,"end_line":335,"end_character":39},"updated":"2016-06-28 13:15:48.000000000","message":"Please add logging here and cover this error by a unit test","commit_id":"cf2f9ea77ac0ee12b7ca8270f0cb9004ff1e470f"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d961463088b53b691853a9ad9bfb93fb2a4726b8","unresolved":false,"context_lines":[{"line_number":332,"context_line":"    \"\"\""},{"line_number":333,"context_line":"    try:"},{"line_number":334,"context_line":"        data[\u0027logs\u0027] \u003d utils.collect_system_logs(journald_max_lines\u003d10000)"},{"line_number":335,"context_line":"    except errors.CommandExecutionError:"},{"line_number":336,"context_line":"        return"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_d0c49141","line":335,"range":{"start_line":335,"start_character":11,"end_line":335,"end_character":39},"in_reply_to":"3aaa91ec_f349e28f","updated":"2016-06-28 15:52:23.000000000","message":"Ops, I see it had a log before... I\u0027ll restore it.","commit_id":"cf2f9ea77ac0ee12b7ca8270f0cb9004ff1e470f"}],"ironic_python_agent/tests/unit/extensions/test_log.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"7a1a200356f9354336fa1cc42061b8bc5ea974b5","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        super(TestLogExtension, self).setUp()"},{"line_number":28,"context_line":"        self.agent_extension \u003d log.LogExtension()"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    @mock.patch.object(utils, \u0027collect_system_logs\u0027)"},{"line_number":31,"context_line":"    def test_collect_system_logs(self, mock_collect):"},{"line_number":32,"context_line":"        ret \u003d \u0027Squidward Tentacles\u0027"},{"line_number":33,"context_line":"        mock_collect.return_value \u003d ret"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_f330c209","line":30,"updated":"2016-06-28 13:15:48.000000000","message":"autospec\u003dTrue","commit_id":"cf2f9ea77ac0ee12b7ca8270f0cb9004ff1e470f"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d961463088b53b691853a9ad9bfb93fb2a4726b8","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        super(TestLogExtension, self).setUp()"},{"line_number":28,"context_line":"        self.agent_extension \u003d log.LogExtension()"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    @mock.patch.object(utils, \u0027collect_system_logs\u0027)"},{"line_number":31,"context_line":"    def test_collect_system_logs(self, mock_collect):"},{"line_number":32,"context_line":"        ret \u003d \u0027Squidward Tentacles\u0027"},{"line_number":33,"context_line":"        mock_collect.return_value \u003d ret"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_70683d22","line":30,"in_reply_to":"3aaa91ec_f330c209","updated":"2016-06-28 15:52:23.000000000","message":"Done","commit_id":"cf2f9ea77ac0ee12b7ca8270f0cb9004ff1e470f"}],"ironic_python_agent/utils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"329dde85eb2687e980213bf3dd0a73634e5853ad","unresolved":false,"context_lines":[{"line_number":362,"context_line":"    return out"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"def gzip_and_b64encode_str(string, file_name\u003dNone):"},{"line_number":366,"context_line":"    \"\"\"Gzip and base64 encode a given string."},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    :param string: The string to be gzipped and base64 encoded."}],"source_content_type":"text/x-python","patch_set":4,"id":"9a8ffd7b_2c2dfcfd","line":365,"updated":"2015-11-27 12:00:41.000000000","message":"nit: I don\u0027t line the _str postfix, I think it\u0027s pretty obvious","commit_id":"85af20e5ac837c194f5d4d6b9eff7827543e367a"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"85ab0fe402557d725cfa88e5b7ca2d211dfd4a35","unresolved":false,"context_lines":[{"line_number":343,"context_line":"                  retrieve the logs from. If None retrieve the logs"},{"line_number":344,"context_line":"                  for everything."},{"line_number":345,"context_line":"    \"\"\""},{"line_number":346,"context_line":"    cmd \u003d [\u0027journalctl\u0027, \u0027--full\u0027, \u0027--no-pager\u0027, \u0027-b\u0027]"},{"line_number":347,"context_line":"    if lines is not None:"},{"line_number":348,"context_line":"        cmd.extend([\u0027-n\u0027, str(lines)])"},{"line_number":349,"context_line":"    if units is not None:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a5ae5dd_8c54a221","line":346,"updated":"2016-02-04 06:09:54.000000000","message":"When I tried this long ago, it didn\u0027t work well because IPA stores logs in the Docker container and CoreOS\u0027s journalctl cannot read them.","commit_id":"d2461f2091f8b2b651fd75b4dc1d44a1a07c874d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"87415fdec0f6be49b9a5fbeb7a2e064c61c29799","unresolved":false,"context_lines":[{"line_number":343,"context_line":"                  retrieve the logs from. If None retrieve the logs"},{"line_number":344,"context_line":"                  for everything."},{"line_number":345,"context_line":"    \"\"\""},{"line_number":346,"context_line":"    cmd \u003d [\u0027journalctl\u0027, \u0027--full\u0027, \u0027--no-pager\u0027, \u0027-b\u0027]"},{"line_number":347,"context_line":"    if lines is not None:"},{"line_number":348,"context_line":"        cmd.extend([\u0027-n\u0027, str(lines)])"},{"line_number":349,"context_line":"    if units is not None:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a5ae5dd_412bcc94","line":346,"in_reply_to":"5a5ae5dd_8c54a221","updated":"2016-02-04 09:37:21.000000000","message":"Hi there,\n\nYeah, I had to mount /run/log to be able to collect the logs, see [0]\n\n[0] https://review.openstack.org/#/c/248832/6/imagebuild/coreos/oem/cloud-config.yml","commit_id":"d2461f2091f8b2b651fd75b4dc1d44a1a07c874d"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"5fc81edc89b27847a0f9d62fe3e095b4602542fc","unresolved":false,"context_lines":[{"line_number":407,"context_line":"    come from journald. On other distributions the logs will come from"},{"line_number":408,"context_line":"    the /var/log directory and dmesg output."},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"    :param journald_max_lines: Maximum number of lines to retrieve from"},{"line_number":411,"context_line":"                               the journald. if None, return everything."},{"line_number":412,"context_line":"    :returns: A tar, gzip base64 encoded string with the logs."},{"line_number":413,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_1e0cfc39","line":410,"updated":"2016-06-24 14:46:12.000000000","message":"Do we only care about max_lines in the journald case?","commit_id":"eb3384fc2e48f1f92df564ab7cb3da459cbc9bf2"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"4f5220b4dc2d1b1f0d99504c6c0470a07428bc55","unresolved":false,"context_lines":[{"line_number":407,"context_line":"    come from journald. On other distributions the logs will come from"},{"line_number":408,"context_line":"    the /var/log directory and dmesg output."},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"    :param journald_max_lines: Maximum number of lines to retrieve from"},{"line_number":411,"context_line":"                               the journald. if None, return everything."},{"line_number":412,"context_line":"    :returns: A tar, gzip base64 encoded string with the logs."},{"line_number":413,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_7ecc206a","line":410,"in_reply_to":"3aaa91ec_1e0cfc39","updated":"2016-06-24 14:52:18.000000000","message":"Honestly I think that truncating by the number of lines is an optimization and not necessary at the moment. Unfortunately, the inspector code at the moment does truncate the journal logs in 10000 lines so I\u0027ve added this parameter to keep it the same for them.","commit_id":"eb3384fc2e48f1f92df564ab7cb3da459cbc9bf2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"7a1a200356f9354336fa1cc42061b8bc5ea974b5","unresolved":false,"context_lines":[{"line_number":53,"context_line":"COLLECT_LOGS_COMMANDS \u003d {"},{"line_number":54,"context_line":"    \u0027ps\u0027: [\u0027ps\u0027, \u0027-aux\u0027],"},{"line_number":55,"context_line":"    \u0027df\u0027: [\u0027df\u0027, \u0027-a\u0027],"},{"line_number":56,"context_line":"    \u0027iptables\u0027: [\u0027iptables\u0027, \u0027-L\u0027],"},{"line_number":57,"context_line":"    \u0027ip_addr\u0027: [\u0027ip\u0027, \u0027addr\u0027],"},{"line_number":58,"context_line":"}"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_fe87e90f","line":56,"range":{"start_line":56,"start_character":18,"end_line":56,"end_character":26},"updated":"2016-06-28 13:15:48.000000000","message":"just a note: iptables is not present on the coreos ramdisk, not sure about tinyipa as well.","commit_id":"cf2f9ea77ac0ee12b7ca8270f0cb9004ff1e470f"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d961463088b53b691853a9ad9bfb93fb2a4726b8","unresolved":false,"context_lines":[{"line_number":53,"context_line":"COLLECT_LOGS_COMMANDS \u003d {"},{"line_number":54,"context_line":"    \u0027ps\u0027: [\u0027ps\u0027, \u0027-aux\u0027],"},{"line_number":55,"context_line":"    \u0027df\u0027: [\u0027df\u0027, \u0027-a\u0027],"},{"line_number":56,"context_line":"    \u0027iptables\u0027: [\u0027iptables\u0027, \u0027-L\u0027],"},{"line_number":57,"context_line":"    \u0027ip_addr\u0027: [\u0027ip\u0027, \u0027addr\u0027],"},{"line_number":58,"context_line":"}"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_70ab1d1f","line":56,"range":{"start_line":56,"start_character":18,"end_line":56,"end_character":26},"in_reply_to":"3aaa91ec_fe87e90f","updated":"2016-06-28 15:52:23.000000000","message":"Yeah that\u0027s alright, that\u0027s why we have a try_get_command_output() method. E.g, iptables is not present in fedora because it uses firewalld instead.\n\nSo, it\u0027s expected to a command to not exist in the currently code.","commit_id":"cf2f9ea77ac0ee12b7ca8270f0cb9004ff1e470f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"7a1a200356f9354336fa1cc42061b8bc5ea974b5","unresolved":false,"context_lines":[{"line_number":329,"context_line":"    try:"},{"line_number":330,"context_line":"        devnull \u003d open(os.devnull)"},{"line_number":331,"context_line":"        subprocess.Popen([\u0027journalctl\u0027], stdout\u003ddevnull,"},{"line_number":332,"context_line":"                         stderr\u003ddevnull).communicate()"},{"line_number":333,"context_line":"    except OSError as e:"},{"line_number":334,"context_line":"        if e.errno \u003d\u003d errno.ENOENT:"},{"line_number":335,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_1ea8f5da","line":332,"updated":"2016-06-28 13:15:48.000000000","message":"1. subprocess.check_call is an easier alternative\n\n2. calling journalctl without arguments will cause it to read the whole journal and pipe it into /dev/null. Lets add -h flag to reduce this unnecessary work.","commit_id":"cf2f9ea77ac0ee12b7ca8270f0cb9004ff1e470f"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d961463088b53b691853a9ad9bfb93fb2a4726b8","unresolved":false,"context_lines":[{"line_number":329,"context_line":"    try:"},{"line_number":330,"context_line":"        devnull \u003d open(os.devnull)"},{"line_number":331,"context_line":"        subprocess.Popen([\u0027journalctl\u0027], stdout\u003ddevnull,"},{"line_number":332,"context_line":"                         stderr\u003ddevnull).communicate()"},{"line_number":333,"context_line":"    except OSError as e:"},{"line_number":334,"context_line":"        if e.errno \u003d\u003d errno.ENOENT:"},{"line_number":335,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_f04c2d9f","line":332,"in_reply_to":"3aaa91ec_1ea8f5da","updated":"2016-06-28 15:52:23.000000000","message":"good call, will change","commit_id":"cf2f9ea77ac0ee12b7ca8270f0cb9004ff1e470f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"7a1a200356f9354336fa1cc42061b8bc5ea974b5","unresolved":false,"context_lines":[{"line_number":426,"context_line":"        try_get_command_output(io_dict, \u0027dmesg\u0027, [\u0027dmesg\u0027])"},{"line_number":427,"context_line":"        file_list.append(\u0027/var/log\u0027)"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"    for name in COLLECT_LOGS_COMMANDS:"},{"line_number":430,"context_line":"        try_get_command_output(io_dict, name, COLLECT_LOGS_COMMANDS[name])"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"    return gzip_and_b64encode(io_dict\u003dio_dict, file_list\u003dfile_list)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_de2e6d41","line":429,"updated":"2016-06-28 13:15:48.000000000","message":"nit: for name, command in COLLECT_LOGS_COMMANDS.items()\n\nor you can make COLLECT_LOGS_COMMANDS a list of tuples right away","commit_id":"cf2f9ea77ac0ee12b7ca8270f0cb9004ff1e470f"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d961463088b53b691853a9ad9bfb93fb2a4726b8","unresolved":false,"context_lines":[{"line_number":426,"context_line":"        try_get_command_output(io_dict, \u0027dmesg\u0027, [\u0027dmesg\u0027])"},{"line_number":427,"context_line":"        file_list.append(\u0027/var/log\u0027)"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"    for name in COLLECT_LOGS_COMMANDS:"},{"line_number":430,"context_line":"        try_get_command_output(io_dict, name, COLLECT_LOGS_COMMANDS[name])"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"    return gzip_and_b64encode(io_dict\u003dio_dict, file_list\u003dfile_list)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_d006511f","line":429,"in_reply_to":"3aaa91ec_de2e6d41","updated":"2016-06-28 15:52:23.000000000","message":"Done","commit_id":"cf2f9ea77ac0ee12b7ca8270f0cb9004ff1e470f"}],"releasenotes/notes/add-log-extension-35ca22cc0709af4c.yaml":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"8fc806a48bb8bfa112cc8f6577d8233c39c819c8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - A new \"log\" extension have been added and can be used to retrieve"},{"line_number":4,"context_line":"    the system logs via the IPA API."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"9abb7d3a_cf1819d6","line":4,"updated":"2016-05-31 18:15:20.000000000","message":"after you make the change I request above, feature #2 will be inspection logs collector being able to work with dmesg.","commit_id":"85d6d4aa0b28a6fd6ad83e00ac58ba65723d3171"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5be824a4dd4ee381116355f2899aba0b8bdfb11d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - A new \"log\" extension have been added and can be used to retrieve"},{"line_number":4,"context_line":"    the system logs via the IPA API."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"9abb7d3a_17bfbcaa","line":4,"in_reply_to":"9abb7d3a_cf1819d6","updated":"2016-06-01 09:08:58.000000000","message":"Commented on the previous comment, I would prefer this new feature to be part of a subsequent patch (for organization sake)","commit_id":"85d6d4aa0b28a6fd6ad83e00ac58ba65723d3171"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"5fc81edc89b27847a0f9d62fe3e095b4602542fc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - A new \"log\" extension have been added and can be used to retrieve"},{"line_number":4,"context_line":"    the system logs via the IPA API."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"3aaa91ec_fe83f053","line":3,"updated":"2016-06-24 14:46:12.000000000","message":"s/have/has","commit_id":"eb3384fc2e48f1f92df564ab7cb3da459cbc9bf2"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"4f5220b4dc2d1b1f0d99504c6c0470a07428bc55","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - A new \"log\" extension have been added and can be used to retrieve"},{"line_number":4,"context_line":"    the system logs via the IPA API."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"3aaa91ec_9ebf4ca9","line":3,"in_reply_to":"3aaa91ec_fe83f053","updated":"2016-06-24 14:52:18.000000000","message":"Done","commit_id":"eb3384fc2e48f1f92df564ab7cb3da459cbc9bf2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"7a1a200356f9354336fa1cc42061b8bc5ea974b5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"3aaa91ec_fed24933","line":5,"updated":"2016-06-28 13:15:48.000000000","message":"fixes: The \"logs\" inspection collector now works with the TinyIPA image.\n\n(I hope its true :)","commit_id":"cf2f9ea77ac0ee12b7ca8270f0cb9004ff1e470f"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d961463088b53b691853a9ad9bfb93fb2a4726b8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"3aaa91ec_76583657","line":5,"in_reply_to":"3aaa91ec_fed24933","updated":"2016-06-28 15:52:23.000000000","message":"++ adding,\n\nI have tested it in the deployment context (not inspector) but since they call exactly the same function I\u0027m pretty sure it should work.","commit_id":"cf2f9ea77ac0ee12b7ca8270f0cb9004ff1e470f"}]}
