)]}'
{"lib/dstat":[{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"d8829b40c641bf032898898eeaeab907b61c60e9","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    # `--top-cpu-adv` and `--top-io-adv` are not compatible with CSV output"},{"line_number":32,"context_line":"    # due to a bug in dstat"},{"line_number":33,"context_line":"    # The process is launched and disowned manually to avoid spawning another"},{"line_number":34,"context_line":"    # redundant screen session."},{"line_number":35,"context_line":"    if is_service_enabled dstat; then"},{"line_number":36,"context_line":"        DSTAT_CSV_OPTS\u003d\"-tcmndrylpg --output $LOGDIR/dstat-csv.log\""},{"line_number":37,"context_line":"        nohup dstat $DSTAT_CSV_OPTS \u003e\u0026 $LOGDIR/dstat-notop.log \u0026 echo $! \u003e$SERVICE_DIR/dstat-csv.pid"}],"source_content_type":"application/x-shellscript","patch_set":6,"id":"1a4dcd0f_c38c2fd9","line":34,"updated":"2015-08-13 04:30:59.000000000","message":"I would not like to see us breaking the abstraction of run_process to, well, run processes.  \n\ni think the best way forward in this case is probably to just have a tools/dstat.sh wrapper that setups up a EXIT trap to \"kill $$\", launches two dstat\u0027s and wait()s (i.e. a mini-daemon)\n\nthat should let us do what we want, and obey run_process/stop_process semantics\n\nyou could probably even do this via a crafty \"bash -c\" command but that is probably a bad idea.","commit_id":"4a58dde0f1cf22dee8bb50faa5afae54953f629d"}],"tools/dstat.sh":[{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"f1e1ecb3237e7b399731e56274c9a086f3535b2f","unresolved":false,"context_lines":[{"line_number":19,"context_line":"DSTAT_CSV_OPTS\u003d\"-tcmndrylpg --output $LOGDIR/dstat-csv.log\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# Execute and background the secondary dstat process and redirect its output."},{"line_number":22,"context_line":"eval \"dstat $DSTAT_CSV_OPTS \u003e\u0026 $LOGDIR/dstat-notop.log \u0026\""},{"line_number":23,"context_line":"dstat_csv_pid\u003d$!"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"# Execute and background the primary dstat process, but keep its output in this"}],"source_content_type":"text/x-sh","patch_set":8,"id":"1a4dcd0f_d3c5aa3d","line":22,"updated":"2015-08-13 22:45:08.000000000","message":"why eval?\n\ndo we want to just ignore this output?  we\u0027re really just interested in the csv, and the \"usual\" output is left in the screen logs, maintaining the status quo?","commit_id":"8fdf15c43e1d129d6a0e7406531fc1c9fbe4a506"},{"author":{"_account_id":17001,"name":"Tim Buckley","email":"timothy.jas.buckley@hpe.com","username":"timothy.jas.buckley"},"change_message_id":"b2ddb0649d8b681e6bf4d7676c29d9a17a1974fb","unresolved":false,"context_lines":[{"line_number":19,"context_line":"DSTAT_CSV_OPTS\u003d\"-tcmndrylpg --output $LOGDIR/dstat-csv.log\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# Execute and background the secondary dstat process and redirect its output."},{"line_number":22,"context_line":"eval \"dstat $DSTAT_CSV_OPTS \u003e\u0026 $LOGDIR/dstat-notop.log \u0026\""},{"line_number":23,"context_line":"dstat_csv_pid\u003d$!"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"# Execute and background the primary dstat process, but keep its output in this"}],"source_content_type":"text/x-sh","patch_set":8,"id":"1a4dcd0f_3dd034f7","line":22,"in_reply_to":"1a4dcd0f_d3c5aa3d","updated":"2015-08-14 15:49:00.000000000","message":"The eval is because I mistakenly thought bash would combine the arguments otherwise. Removed!\n\nYou\u0027re right about the output, saving it was mainly intended to help debug some issues with dstat, but now that it\u0027s working properly that can be discarded.","commit_id":"8fdf15c43e1d129d6a0e7406531fc1c9fbe4a506"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"f1e1ecb3237e7b399731e56274c9a086f3535b2f","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    [[ $dstat_csv_pid ]] \u0026\u0026 kill $dstat_csv_pid"},{"line_number":34,"context_line":"    [[ $dstat_pid ]] \u0026\u0026 kill $dstat_pid"},{"line_number":35,"context_line":"}"},{"line_number":36,"context_line":"trap cleanup EXIT"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"# Keep this script running as long as the child dstat processes are alive."},{"line_number":39,"context_line":"wait $dstat_csv_pid $dstat_pid"}],"source_content_type":"text/x-sh","patch_set":8,"id":"1a4dcd0f_934962ba","line":36,"updated":"2015-08-13 22:45:08.000000000","message":"i think it might be easier to just kill all children, something like\n\n trap \"kill -- -$$\" EXIT\n\ni think should work fine?","commit_id":"8fdf15c43e1d129d6a0e7406531fc1c9fbe4a506"},{"author":{"_account_id":17001,"name":"Tim Buckley","email":"timothy.jas.buckley@hpe.com","username":"timothy.jas.buckley"},"change_message_id":"b2ddb0649d8b681e6bf4d7676c29d9a17a1974fb","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    [[ $dstat_csv_pid ]] \u0026\u0026 kill $dstat_csv_pid"},{"line_number":34,"context_line":"    [[ $dstat_pid ]] \u0026\u0026 kill $dstat_pid"},{"line_number":35,"context_line":"}"},{"line_number":36,"context_line":"trap cleanup EXIT"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"# Keep this script running as long as the child dstat processes are alive."},{"line_number":39,"context_line":"wait $dstat_csv_pid $dstat_pid"}],"source_content_type":"text/x-sh","patch_set":8,"id":"1a4dcd0f_5df42086","line":36,"in_reply_to":"1a4dcd0f_934962ba","updated":"2015-08-14 15:49:00.000000000","message":"Ah, that is substantially simpler, thanks!","commit_id":"8fdf15c43e1d129d6a0e7406531fc1c9fbe4a506"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"f1e1ecb3237e7b399731e56274c9a086f3535b2f","unresolved":false,"context_lines":[{"line_number":36,"context_line":"trap cleanup EXIT"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"# Keep this script running as long as the child dstat processes are alive."},{"line_number":39,"context_line":"wait $dstat_csv_pid $dstat_pid"}],"source_content_type":"text/x-sh","patch_set":8,"id":"1a4dcd0f_93f72259","line":39,"updated":"2015-08-13 22:45:08.000000000","message":"that would avoid us having to worry too much about children, and anything they might spawn","commit_id":"8fdf15c43e1d129d6a0e7406531fc1c9fbe4a506"},{"author":{"_account_id":17001,"name":"Tim Buckley","email":"timothy.jas.buckley@hpe.com","username":"timothy.jas.buckley"},"change_message_id":"b2ddb0649d8b681e6bf4d7676c29d9a17a1974fb","unresolved":false,"context_lines":[{"line_number":36,"context_line":"trap cleanup EXIT"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"# Keep this script running as long as the child dstat processes are alive."},{"line_number":39,"context_line":"wait $dstat_csv_pid $dstat_pid"}],"source_content_type":"text/x-sh","patch_set":8,"id":"1a4dcd0f_7d81dcc2","line":39,"in_reply_to":"1a4dcd0f_93f72259","updated":"2015-08-14 15:49:00.000000000","message":"Done","commit_id":"8fdf15c43e1d129d6a0e7406531fc1c9fbe4a506"}]}
