Este recurso permite verificar as instâncias AEM existentes quanto à sua capacidade de atualização, detectando padrões em uso que:
Tal poderia servir de avaliação do esforço de desenvolvimento que está envolvido na atualização para a AEM 6.4.
O Detector de padrão é lançado separadamente como um um pacote trabalhando em qualquer versão de AEM de origem da versão 6.1 para a 6.5, visando AEM atualização 6.5. Ele pode ser instalado usando o Gerenciador de pacotes.
O Detector de padrão pode ser executado em qualquer ambiente, incluindo instâncias de desenvolvimento local. No entanto, para:
Você pode usar vários métodos para verificar a saída do Detector de padrão:
Vá para o Console da Web AEM navegando até: https://endereço_do_servidor:serverport/system/console/configMgr
Selecione Status - Pattern Detector como mostrado na imagem abaixo:
Por meio de uma interface JSON comum ou baseada em texto reativo
Por meio de uma interface de linhas JSON reativa, que gera um documento JSON separado em cada linha.
Ambos os métodos estão detalhados abaixo:
A interface reativa permite o processamento do relatório de violação assim que uma suspeita é detectada.
A saída está disponível atualmente em 2 URLs:
As informações na saída são formatadas como uma série de entradas de evento. Há dois canais - um para violações de publicação e o segundo para publicar o progresso atual.
Eles podem ser obtidos usando os seguintes comandos:
curl -Nsu 'admin:admin' http://localhost:4502/system/console/status-pattern-detector.txt | tee patterns-report.log | grep SUSPICION
A saída será parecida com esta:
2018-02-13T14:18:32.071+01:00 [SUSPICION] The pattern=ECU/extraneous.content.usage was found by detector=ContentAccessDetector with id=a07fd94318f12312c165e06d890cbd3c2c8b8dad0c030663db8b4c800dd7c33f message="Cross-boundary overlay of internal marked path /libs/granite/operations/components/commons/commons.jsp/jcr:content referenced at /apps/granite/operations/components/commons/commons.jsp/jcr:content with properties redefined: jcr:lastModifiedBy, jcr:mimeType, jcr:data, jcr:lastModified, jcr:uuid". More info at=https://www.adobe.com/go/aem6_EC
O progresso pode ser filtrado usando o comando grep
:
curl -Nsu 'admin:admin' http://localhost:4502/system/console/status-pattern-detector.txt | tee patterns-report.log | grep PROGRESS
O que resulta na seguinte saída:
2018-02-13T14:19:26.909+01:00 [PROGRESS] emitted=127731/52 MB patterns (from=6.4), analysed=45780/16 MB items, found=0 suspicions so far in period=PT5.005S (throughput=34667 items/sec)
2018-02-13T14:19:31.904+01:00 [PROGRESS] emitted=127731/52 MB patterns (from=6.4), analysed=106050/39 MB items, found=0 suspicions so far in period=PT10S (throughput=23378 items/sec)
2018-02-13T14:19:35.685+01:00 [PROGRESS] Finished in period=PT13.782
Da mesma forma, o JSON pode ser processado usando a ferramenta jq assim que for publicado.
curl -Nsu 'admin:admin' http://localhost:4502/system/console/status-pattern-detector.json | tee patterns-report.json | jq --unbuffered -C 'select(.suspicion == true)'
Com a saída:
{
"timestamp": "2018-02-13T14:20:18.894+01:00",
"suspicion": true,
"pattern": {
"code": "ECU",
"type": "extraneous.content.usage",
"detective": "ContentAccessDetector",
"moreInfo": "https://www.adobe.com/go/aem6_ECU"
},
"item": {
"id": "a07fd94318f12312c165e06d890cbd3c2c8b8dad0c030663db8b4c800dd7c33f",
"message": "Cross-boundary overlay of internal marked path /libs/granite/operations/components/commons/commons.jsp/jcr:content referenced at /apps/granite/operations/components/commons/commons.jsp/jcr:content with properties redefined: jcr:lastModifiedBy, jcr:mimeType, jcr:data, jcr:lastModified, jcr:uuid"
}
}
O progresso é relatado a cada 5 segundos e pode ser obtido excluindo outras mensagens além daquelas marcadas como suspeitas:
curl -Nsu 'admin:admin' http://localhost:4502/system/console/status-pattern-detector.json | tee patterns-report.json | jq --unbuffered -C 'select(.suspicion == false)'
Com a saída:
{
"suspicion": false,
"timestamp": "2018-02-13T14:21:17.279+01:00",
"type": "PROGRESS",
"database": {
"patternsEmitted": 127731,
"patternsEmittedSize": "52 MB",
"databasesEmitted": [
"6.4"
]
},
"state": {
"itemsAnalysed": 57209,
"itemsAnalysedSize": "26 MB",
"suspicionsFound": 0
},
"progress": {
"elapsedTime": "PT5.003S",
"elapsedTimeMilliseconds": 5003,
"itemsPerSecond": 36965
}
}
{
"suspicion": false,
"timestamp": "2018-02-13T14:21:22.276+01:00",
"type": "PROGRESS",
"database": {
"patternsEmitted": 127731,
"patternsEmittedSize": "52 MB",
"databasesEmitted": [
"6.4"
]
},
"state": {
"itemsAnalysed": 113194,
"itemsAnalysedSize": "46 MB",
"suspicionsFound": 0
},
"progress": {
"elapsedTime": "PT10S",
"elapsedTimeMilliseconds": 10000,
"itemsPerSecond": 24092
}
}
{
"suspicion": false,
"timestamp": "2018-02-13T14:21:25.762+01:00",
"type": "FINISHED",
"database": {
"patternsEmitted": 127731,
"patternsEmittedSize": "52 MB",
"databasesEmitted": [
"6.4"
]
},
"state": {
"itemsAnalysed": 140744,
"itemsAnalysedSize": "63 MB",
"suspicionsFound": 1
},
"progress": {
"elapsedTime": "PT13.486S",
"elapsedTimeMilliseconds": 13486,
"itemsPerSecond": 19907
}
}
{
"suspicion": false,
"type": "SUMMARY",
"suspicionsFound": 1,
"totalTime": "PT13.487S"
}
A abordagem recomendada é salvar toda a saída do ondulado no arquivo e processá-la por jq
ou grep
para filtrar o tipo de informação.
Atualmente, o Detector de padrão permite verificar: