рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рджрд░реНрд╢рди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЙрдЧрдореИрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрднрд╡

рдкрд░рд┐рдЪрдп


рд╢реБрдн рджреЛрдкрд╣рд░

рдЕрдкрдиреА рдкрд╣рд▓реА рдкреЛрд╕реНрдЯ рдореЗрдВ, рдореИрдВ рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬреИрд╕реЗ рдХрд┐ рд▓реЙрдЧрдореИрди , рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡реЗрджрди рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЦрдкрдд (рдФрд░ рди рдХреЗрд╡рд▓) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХрд╛рдо рдкрд░ рдПрдХ рджрд┐рди, рдХрд╛рд░реНрдп рдПрдХрд▓ рд╡рд┐рдВрдбреЛрдЬ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рдореАрдЯреНрд░рд┐рдХ рдирд┐рдХрд╛рд▓рдиреЗ рдХрд╛ рд╕реЗрдЯ рдерд╛ред рдореБрдЦреНрдп рд╕реНрдерд┐рддрд┐ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рддреГрддреАрдп-рдкрдХреНрд╖ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛, рдФрд░ рдЙрд╕ рд╕рдордп рд╕реЗ рдореБрдЭреЗ рдРрд╕реА рдЪреАрдЬреЛрдВ рдореЗрдВ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рдерд╛, рдереЛрдбрд╝реА рдЦреБрджрд╛рдИ рдХреЗ рдмрд╛рдж, рд╡рд┐рдХрд▓реНрдк рд▓реЙрдЧрдореИрди рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛ред рд╡рд┐рд╢реЗрд╖ рд╕рдЯреАрдХрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА рдФрд░ рдХреЗрд╡рд▓ рдЖрд╡реЗрджрди рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрди рдЦрдкрдд рдХреА рдкреНрд░рдХреГрддрд┐ рдХреЛ рд╕рдордЭрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд▓реЙрдЧрдореИрди рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдХрд╛рдлреА рдЙрдкрдпреБрдХреНрдд рдерд╛ред

рддреЛ, рдЪрд▓реЛ рд╕реАрдзреЗ рдкреЛрд╕реНрдЯ рдХреЗ рд╕рд╛рд░ рдкрд░ рдЬрд╛рдПрдВред

рд▓реЙрдЧрдореИрди рдХреНрдпрд╛ рд╣реИ?


рдЖрдк рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢, рдХрд╛рдо рдкрд░ рдпрд╛ рдШрд░ рдкрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд░рдЦрддреЗ рд╣реИрдВ, рджреЗрд╢реА рд╡рд┐рдВрдбреЛрдЬ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкреНрд░рджрд░реНрд╢рди рдореЙрдирд┐рдЯрд░ (рдкрд░рдлреЙрдорди) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рддреЛ рд▓реЙрдЧрдореИрди рд▓рдЧрднрдЧ рдкреВрд░реНрдгрддрд╛ рдХреА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдкреНрд░рджрд░реНрд╢рди рдХрд╛рдЙрдВрдЯрд░ рдмрдирд╛рдиреЗ, рд╢реБрд░реВ рдХрд░рдиреЗ, рдмрд╛рд╣рд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдФрд░ рдмрд╛рд╣рд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдореБрдЭреЗ рдХреЗрд╡рд▓ рдореВрд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдиреАрдЪреЗ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред

рдореВрд▓ рд╕рдВрдЪрд╛рд▓рди


рдПрдХ рдЫреЛрдЯрд╛ рдиреЛрдЯ: рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЕрдзрд┐рдХрд╛рд░ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдРрд╕реА рддреНрд░реБрдЯрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред
:   .   ,  . 


рдмрдирд╛рдП рдЧрдП рдФрд░ рдЪрд▓ рд░рд╣реЗ рдХрд╛рдЙрдВрдЯрд░ рджреЗрдЦреЗрдВ


рдЖрдк logman рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХрд▓реЗрдХреНрдЯрд░реЛрдВ рдХреА рд╕реВрдЪреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд╖реНрдХрд░реНрд╖ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреЗ:
      ------------------------------------------------------------------------------- cpu     . 


рдПрдХ рдкреНрд░рджрд░реНрд╢рди рдХрд╛рдЙрдВрдЯрд░ рдмрдирд╛рдирд╛


рдХрд╛рдЙрдВрдЯрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ ( рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред)
 logman create counter "counter_name" -f csv -si "interval" --v -o "output_file" -c counter 




рд╣рдореЗрдВ рдЕрдВрддрд┐рдо рд╡рд┐рдХрд▓реНрдк рдкрд░ рдзреНрдпрд╛рди рдХреЗрдиреНрджреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ "рдХрд╛рдЙрдВрдЯрд░" рдлрд╝реАрд▓реНрдб рдореЗрдВ рдХреНрдпрд╛ рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реИ, рдЖрдк рдкрд░рдлрд╝реЙрд░реНрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдбреЗрдЯрд╛ рдХрд▓реЗрдХреНрдЯрд░реЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ "рдХреНрд░рд┐рдПрдЯ -> рдбреЗрдЯрд╛ рдХрд▓реЗрдХреНрдЯрд░" рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░ "рдХрд╛рдЙрдВрдЯрд░ рдЬреЛрдбрд╝реЗрдВ" рдЪреБрдиреЗрдВ рдФрд░ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдВрдбреЛ рдореЗрдВ рдХрд╛рдЙрдВрдЯрд░ рдХрд╛ рдкреНрд░рдХрд╛рд░ рджреЗрдЦреЗрдВ рдЬреЛ рд╣рдореЗрдВ рд░реБрдЪрддрд╛ рд╣реИред



рдореИрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рд╕реАрдкреАрдпреВ рдФрд░ рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдорд╛рдк рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ ( рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреЛрд╕реНрдЯ рдиреЗ рдореБрдЭреЗ рд╕реАрдкреАрдпреВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХреА):



рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ CPU рдЦрдкрдд рдХреЗ рдкреНрд░рддрд┐рд╢рдд рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ ("\ Processor (_Total) \% рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдордп" * "" рдкреНрд░рдХреНрд░рд┐рдпрд╛ (Application_name) \% рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп ") / (рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рд╕рдВрдЦреНрдпрд╛ * 100)

рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХреЛ рдПрдХ рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдлрд┐рд░ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдорд╛рди рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдиреЗ рдХреЙрд▓рдо рдореЗрдВ рд╣реЛрдВрдЧреЗред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореИрдВ рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрдорд╛рдВрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛:

 logman create counter "explorer-cpu.usage" -f csv -si 1 --v -o "d:\logman-test\raw\explorer-cpu.usage.csv" -c "\Processor(_Total)\% User time" "\Process(explorer)\% Processor time" 


рдХрд╛рдЙрдВрдЯрд░ рд╢реБрд░реВ рдФрд░ рдмрдВрдж рдХрд░реЛ


рдЙрдкрдпреБрдХреНрдд рдЖрджреЗрд╢реЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд:
 logman start "counter_name" 

 logman stop "counter_name" 


рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ


рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдЗрд╕реЗ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рд░реЛрдХрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП):
 logman delete "counter_name" 


рдкрд╛рдпрдерди рдЖрд╡рд░рдг


рдХреЛрдб рдкрд░ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдПрдХ рдЫреЛрдЯреА (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рдлреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рдЧрдИ) рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬреЛ рдХрд┐ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рджреМрд░рд╛рди рдЙрддреНрдкрдиреНрди рд╣реБрдИ рдереАред

рдЪреВрдВрдХрд┐ рдпрд╣ рд╕рдордп рдХреА рдПрдХ рдЫреЛрдЯреА рдЕрд╡рдзрд┐ (5-15 рд╕реЗрдХрдВрдб) рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ 1 рдПрд╕ (-si рд╡рд┐рдХрд▓реНрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ) рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рдЕрдВрддрд░рд╛рд▓ рдмрд╣реБрдд рд▓рдВрдмрд╛ рдерд╛ред рдЗрдВрдЯрд░рдиреЗрдЯ рдФрд░ рдХрд╛рд░реНрдпрд╛рд▓рдп рдореЗрдВ рдЦреЛрдЬред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг, рдореБрдЭреЗ рдРрд╕рд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдЕрдВрддрд░рд╛рд▓ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдФрд░ рдЧреНрд░рд╛рдлрд╝ рдкрд░ рдкреНрд░рд╛рдкреНрдд рдЕрдВрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрдврд╝рд╛рдирд╛ рдЪрд╛рд╣рддреА рдереАред рдереЛрдбрд╝рд╛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдЬрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ - рдпрджрд┐ рдЖрдк рдЕрдВрддрд░рд╛рд▓ рдХреЛ рдХрдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, 100-500 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХрдИ рдХрд▓реЗрдХреНрдЯрд░реЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рд╕реЗ, рдЖрдк рдПрдХ рд╕реЗрдХрдВрдб рдореЗрдВ рдХрд┐рддрдиреЗ рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдПрдХ рдореМрдЬреВрджрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдерд╛, рдФрд░ рдЕрдВрдд рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдЪрд░рдгреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╣рд╛рдпрдХ рдЖрд╡рд░рдг рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред

рдиреАрдЪреЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рд╣реИ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕реАрдкреАрдпреВ рдФрд░ рд░реИрдо рдкрд░ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИред

pylogman.py
 import os import logging import random import time import subprocess import glob import multiprocessing CPU_USER_COUNTER = '"\Processor(_Total)\% User time"' CPU_APP_COUNTER = '"\Process({app})\% Processor time"' MEMORY_COUNTER = '"\Process({app})\Working Set"' APP_PLACEHOLDER = '{app}' class PerflogManager(object): def __init__(self, app_name, precision, results_dir, max_mem=1, interval=1): """ Args: app_name: name of the application without "exe" extention precision: amount of results_dir: output folder max_mem: this value is used to calculate % from total avaliable memory for further plotting interval: interval which will be used as "-si" logman option value """ self._app_name = app_name self._precision = precision self._counters = { 'cpu.usage': '{cpu_user} {cpu_app}'.format(cpu_user=CPU_USER_COUNTER, cpu_app=CPU_APP_COUNTER).replace(APP_PLACEHOLDER, app_name), 'mem.usage': MEMORY_COUNTER.replace(APP_PLACEHOLDER, app_name) } self._results_dir = os.path.normpath(results_dir) self._raw_dir = os.path.join(self._results_dir, 'raw') self._final_dir = os.path.join(self._results_dir, 'csv') self._interval = interval self._max_mem = max_mem self._collectors = [] if not os.path.exists(self._results_dir): os.makedirs(self._results_dir) os.makedirs(self._raw_dir) os.makedirs(self._final_dir) logging.info('Directory "{path}" for logman results has been created.'.format(path=self._results_dir)) logging.info('Performance logman manager has been created for "{}" application.'.format(self._app_name)) def init_collectors(self): """ Creates collectors by "logman create" command """ logging.info('Creating collectors set...') for lang in self._counters: for idx in range(self._precision): collector = '{app}-{collector}-{id}'.format(app=self._app_name, collector=lang, id=idx) output = os.path.join(self._raw_dir, collector + '.csv') self.__create(collector, self._counters[lang], output) self._collectors.append(collector) def start_all(self): """ Starts all the collectors from self._collectors list """ for collector in self._collectors: self.__start(collector) time.sleep(random.uniform(0.1, 0.9)) def stop_all(self): """ Stops and deletes all initiated collectors from self._collectors list """ for collector in self._collectors: self.__stop(collector) self.__delete(collector) def cleanup(self): """ Cleans raw_dir directory which contains unprocessed csv file from logman """ logging.info('Cleaning results directory from unnecessary files.') for collector in self._collectors: csv = os.path.join(self._raw_dir, '{}.csv'.format(collector)) if os.path.isfile(csv): os.remove(csv) def process_csv(self): """ Composes and formats data from all counters for further plotting """ for lang in self._counters: final_output = os.path.join(self._final_dir, '{}.csv'.format(lang)) self.__compose_csv(final_output, lang) self.__format_data(final_output) def __compose_csv(self, output, counter): """ Concatenates gathered csv data to one file """ logging.info('Composing file "{}".'.format(output)) try: with open(output, 'a') as outfile: for csv in glob.glob(os.path.join(self._raw_dir, '*{}*'.format(counter))): with open(csv, 'r') as file: outfile.writelines(file.readlines()[1:]) # Get rid of a file header with service info logging.info('File {} successfully created.'.format(output)) except (FileNotFoundError, IOError) as e: logging.error('Failed to compose file {file}: {exception}'.format(file=output, exception=e)) def __format_data(self, file): """ Sorts data after self.__compose_csv function and calculates % of CPU and Memory """ try: with open(file, 'r') as csv: raw_data = csv.readlines() with open(file, 'w') as csv: sorted_data = [line.replace('"', '').replace(',', ';') for line in sorted(raw_data) if '" "' not in line] csv_data = [] if 'cpu' in file: for line in sorted_data: time, cpu_user, cpu_app = line.split(';') cpu = (float(cpu_user) * float(cpu_app)) / (multiprocessing.cpu_count() * 100) csv_data.append('{};{:.2f}\n'.format(time, cpu)) if 'mem' in file: for line in sorted_data: time, total_memory = line.split(';') mem = float(total_memory) / (self._max_mem * 10000) csv_data.append('{};{:.2f}\n'.format(time, mem)) csv.writelines(csv_data) except (FileNotFoundError, IOError) as e: logging.error('Failed to process file "{file}": {exception}'.format(file=file, exception=e)) def __logman(self, cmd): """ Default wrapper for logman commands Args: cmd: windows command to be executed """ try: logging.debug('Running {}'.format(cmd)) subprocess.check_call(cmd) except (subprocess.CalledProcessError, OSError) as e: logging.error('Failed to execute command "{}": {}.'.format(cmd, e)) def __create(self, name, counter, output): """ Creates logman counter Args: name: uniq name of a collector counter: type of the counter (can be taken from perfmon) output: csv file for results """ logging.info('Creating collector "{}"'.format(name)) cmd = 'logman create counter "{name}" -f csv -si {interval} ' \ '--v -o "{output}" -c {counter}'.format(name=name, interval=str(self._interval), output=output, counter=counter) self.__logman(cmd) def __start(self, name): """ Starts logman collector Args: name: uniq name of a collector """ logging.info('Starting collector "{}".'.format(name)) cmd = 'logman start {}'.format(name) self.__logman(cmd) def __stop(self, name): """ Stops logman collector Args: name: uniq name of a collector """ logging.info('Stopping collector "{}".'.format(name)) cmd = 'logman stop {}'.format(name) self.__logman(cmd) def __delete(self, name): """ Deletes logman collector Args: name: uniq name of a collector """ logging.info('Deleting collector "{}".'.format(name)) cmd = 'logman delete {}'.format(name) self.__logman(cmd) if __name__ == '__main__': logging.basicConfig(level=logging.DEBUG) app = 'skype' start_time = time.strftime('%Y%m%d-%H%M%S', time.gmtime()) logman = PerflogManager(app, 3, 'd:/logman-test/') logman.init_collectors() logman.start_all() time.sleep(20) logman.stop_all() logman.process_csv() 



рдирд┐рд╖реНрдХрд░реНрд╖


рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рд▓реЙрдЧрдореИрди рдПрдХ рдЙрдкрдпреЛрдЧреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реИ, рдЕрдЧрд░ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рдореАрдЯреНрд░рд┐рдХ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдХрдо рд╕реЗ рдХрдо рд▓рд╛рдЧрдд рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдереЛрдбрд╝реЗ рд╕рдордп рдореЗрдВ рдореБрдЭреЗ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдФрд░ рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

Source: https://habr.com/ru/post/In203692/


All Articles