
Instrumentei uma construção mvn para emitir dados de criação de perfil, que desejo analisar mais tarde. Portanto, fiz o script sed abaixo, para gerar dados json a partir da saída dos profilers. Eu chamo o script com
cat some.log | sed -nf thescript.sed > some.json
Ele produz uma lista aninhada de objetos json ("projetos"), mas cada lista termina com um ",".
Para criar um arquivo json válido, executo as seguintes etapas em meu editor favorito.
- Unindo tudo em uma linha
- insira um objeto de empacotamento acrescentando "{\"list\":[" e anexando "]}" a todo o conteúdo.
- substitua todas as ocorrências de ", ]" (listas terminadas incorretamente) por "]"
- insira uma quebra de linha após cada projeto, para evitar falhas na análise JSON devido à linha excessivamente longa.
Atualmente, executo essas etapas manualmente e também quero que isso seja programado.
- Como posso fazer com que o script sed produza json válido (ou seja, faça quebras de linhaapenasquando eu quiser, ou não coloque aquela terminação ",")
ou como posso fazer o script das etapas acima em outro filtro?
/[PROFILER]/ s/\[PROFILER\] \(.*\)ms : Task (project-execute new-mvifp:\(.*\):\(.*\) ( task-segment: \[\(.*\)\] )) started./{"\2":{"timestamp":\1,"project":"\2","tasks":"\4","branch":"\3","segments":[/p /[PROFILER]/ s/\[PROFILER\] \(.*\)ms : Task (Segment:\(.*\)) started./{"\2":{"timestamp":\1,"segment":"\2","mojos":[/p /[PROFILER]/ s/\[PROFILER\] \(.*\)ms : Task (mojo-execute \(.*\) {execution: \(.*\)}) started./{"\2":{"timestamp":\1,"mojo":"\2","execution":"\3",/p /[PROFILER]/ s/\[PROFILER\] \(.*\)ms : Task (mojo-execute \(.*\) {execution: \(.*\)}) finished.*duration \(.*\)ms./"duration":\4}},/p /[PROFILER]/ s/\[PROFILER\] \(.*\)ms : Task (Segment:\(.*\)) finished.*duration \(.*\)ms./],"duration":\3}},/p /[PROFILER]/ s/\[PROFILER\] \(.*\)ms : Task (project-execute new-mvifp:\(.*\):\(.*\) ( task-segment: \[\(.*\)\] )) finished.*duration \(.*\)ms./],"duration":\5}},/p