Avaliando a complexidade da atualização com o Detector de padrões

Visão geral overview

Esse recurso permite verificar as instâncias existentes do AEM quanto à sua capacidade de atualização, detectando padrões em uso que:

  1. Violam determinadas regras e são realizadas em áreas que serão afetadas ou substituídas pela atualização
  2. Use um recurso do AEM 6.x ou uma API que não seja compatível com versões anteriores no AEM 6.5 e possa ser interrompida após a atualização.

Isso pode servir como uma avaliação do esforço de desenvolvimento envolvido na atualização para o AEM 6.5.

Como configurar how-to-set-up

O Detector de padrões é lançado separadamente como um um pacote que funciona em qualquer versão do AEM de origem, da 6.1 para a 6.5, direcionado à atualização do AEM 6.5. Ele pode ser instalado usando o Gerenciador de Pacotes.

Como usar how-to-use

NOTE
O Detector de padrões pode ser executado em qualquer ambiente, incluindo instâncias de desenvolvimento locais. No entanto, para:
  • aumentar a taxa de detecção
  • evitar qualquer lentidão em instâncias críticas para os negócios
ao mesmo tempo, é recomendável executar em ambientes de preparo o mais próximo possível dos de produção nas áreas de aplicativos, conteúdo e configurações do usuário.

Você pode usar vários métodos para verificar a saída do Detector de padrões:

  • Através do console de Inventário Felix:
  1. Vá para o Console da Web do AEM navegando até https://serveraddress:serverport/system/console/configMgr

  2. Selecione Status - Detector de Padrões conforme mostrado na imagem abaixo:

    screenshot-2018-2-5detector-padrão

  • Por meio de uma interface JSON reativa baseada em texto ou regular
  • Por meio de uma interface de linhas JSON reativa, ​ que gera um documento JSON separado em cada linha.

Ambos os métodos são detalhados abaixo:

Interface Reativa reactive-interface

A interface reativa permite o processamento do relatório de violações assim que uma suspeita é detectada.

A saída está disponível atualmente em 2 URLs:

  1. Interface de texto sem formatação
  2. Interface JSON

Manuseio da interface de texto sem formatação handling-the-plain-text-interface

As informações na saída são formatadas como uma série de entradas de evento. Há dois canais - um para publicação de violações e o segundo para publicação do progresso atual.

Elas podem ser obtidas usando os seguintes comandos:

curl -Nsu 'admin:admin' https://localhost:4502/system/console/status-pattern-detector.txt | tee patterns-report.log | grep SUSPICION

A saída terá esta aparência:

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' https://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.5), 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.5), 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

Manuseio da interface JSON handling-the-json-interface

Da mesma forma, o JSON pode ser processado usando a ferramenta jq assim que for publicado.

curl -Nsu 'admin:admin' https://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_br"
  },
  "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' https://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.5"
    ]
  },
  "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.5"
    ]
  },
  "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.5"
    ]
  },
  "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"
}
NOTE
A abordagem recomendada é salvar toda a saída do curl no arquivo e processá-la via jq ou grep para filtrar o tipo de informação.

Escopo da detecção scope

Atualmente, o Detector de padrões permite verificar o seguinte:

  • Incompatibilidade de exportações e importações de pacotes OSGi
  • Sobreutilizações de tipos e supertipos de recursos do Sling (com sobreposições de conteúdo de caminho de pesquisa)
  • definições de índices do Oak (compatibilidade)
  • Pacotes VLT (uso excessivo)
  • rep:Compatibilidade de nós de usuário (no contexto da configuração do OAuth)
NOTE
O Detector de padrões tenta prever com precisão os avisos de atualização. No entanto, pode gerar falsos positivos em alguns cenários.
recommendation-more-help
51c6a92d-a39d-46d7-8e3e-2db9a31c06a2