a Ri4@spddlZddlZddlZddlZddlmZmZej dddZ ddd Zdd d Zd d ZddZddZdS)N) log_utilsutilsTcCsR|pd}|D]&}tj||}tj|r |Sq |rJtd||ndSdS)N)z /usr/sbinz/sbinz/usr/binz/binz{0} could not be found at {1})ospathjoinisfile Exceptionformat)namepathsZ raise_excitfnamer3/usr/libexec/kcare/python/kcarectl/process_utils.pyfind_cmds  rFc Cs|r tjnd}|rtjnd}tj||||d}|\}} |j} |durRt|}|durdt| } tt dj |j|| d |d|r| rt | |} || _| | _| | || fS)N)stdoutstderrshellz Call result for `{cmd}`: exit code {exit_code} === STDOUT === {stdout} === STDERR === {stderr} === END ===  )Z exit_coderrcmd) subprocessPIPEPopen communicate returncodernstrrlogdebugtextwrapdedentr rCalledProcessErroroutputr) command catch_stdout catch_stderrrcheckrrpZstdout_capturedZstderr_capturedcodeexcrrr run_commands,     r)cCst|d|d\}}}|S)NT)r#r%)r))argsr%_rrrr check_outputDsr,c Cszdddddt|g}t|dd\}}}|rHtjdj|d d d Wd S|}dddd dt|g}t|dd\}}}|rtjdj|d d d Wd S|}t||fWSty}z&tjdj||dd d WYd}~d Sd}~00dS)Npsz --no-headersz-oppidz-pT)r#z3Could not retrieve process parent PID for PID {pid})pidF print_msg)NNZcommz-Could not retrieve process name for PID {pid}zJCould not retrieve process name and parent PID for PID {pid}, error: {err})r/err)strr)rloginfor stripintr ) r/Zcmd_ppidr'rr+r.Zcmd_commr errr _get_parent_pid_and_process_nameIs&r8cstfdd}|S)zMDecorator that logs parent process chain before calling the wrapped function.cst|i|S)N)_log_all_parent_processes)r*kwargsfuncrrwrapperfsz)log_all_parent_processes..wrapper) functoolswraps)r<r=rr;rlog_all_parent_processescsr@cCsg}t}|dkrF|dkrFt|\}}|||f|dur@qF|}q tjdddtt|D]:\}\}}d|d}tjdj||pd |pd d ddq`dS) NrrzAgent parent processes chain:Fr0-z->z{prefix} "{name}" (pid: {pid})unknown)prefixr r/) rgetpidr8appendrr4 enumeratereversedr )Z process_chainZ current_pidr.Z process_namelevelr/r rCrrrr9ns  r9)NT)FFFF)F)r>rrrrrAnyListOptionalTupleUnioncachedrr)r,r8r@r9rrrrs  %